`
iwindyforest
  • 浏览: 235088 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java实现的类似windows操作系统的xCopy

阅读更多
package com.iwindyforest.dir;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

public class FileSystem
{
    private ArrayList<String> fileList = new ArrayList<String>();

    public FileSystem(String path)
    {
        long a = System.currentTimeMillis();
        this.listFiles(path);
        this.print("TimeCost:" + (System.currentTimeMillis() - a) + " Millis");

        this.xCopy(path, "C:\\temp");
    }



    private void print(String message)
    {
        System.out.println(message);
    }



    public void listFiles(String strPath)
    {
        File dir = new File(strPath);
        if(dir != null && dir.exists())
        {
            if(dir.isDirectory())
            {
                File[] files;

                try
                {
                    files = dir.listFiles();
                }
                catch(SecurityException e)
                {
                    files = null;
                    e.printStackTrace();
                }

                if(files == null)
                {
                    return;
                }
                else
                {
                    for(int i = 0; i < files.length; i++)
                    {
                        String strFileName = files[i].getAbsolutePath();
                        if(files[i].isDirectory())
                        {
                            this.print("D--:" + strFileName);
                            this.listFiles(files[i].getAbsolutePath());
                        }
                        else
                        {
                            this.print("F--:" + strFileName);
                            fileList.add(files[i].getAbsolutePath());
                        }
                    }
                }
            }
            else
            {
                this.print("F--:" + dir.getAbsolutePath());
            }
        }
        else
        {
            this.print("FileNotExist:" + dir.getAbsolutePath());
        }
    }

    private boolean checkDir(File dir)
    {

        if(dir == null)
        {
            this.print("dirPath is null");
            return false;
        }
        else if(!dir.exists())
        {
            this.print("dirPath: " + dir.getAbsolutePath() + " doesn't exist.");
            return false;
        }
        else if(!dir.isDirectory())
        {
            this.print("dirPath: " + dir.getAbsolutePath()
                    + " is not a directory.");
            return false;
        }
        else
        {
            return true;
        }
    }

    /**

     * 类似与windows操作系统的xCopy,递归拷贝整个源目录到目标目录。 源目录和目标目录必须已经存在。
      * 
     * @param srcDirPath
     * @param destDirPath
     */
    public void xCopy(String srcDirPath, String destDirPath)
    {
        File srcDir = new File(srcDirPath);
        File destDir = new File(destDirPath);
        if(this.checkDir(srcDir) && this.checkDir(destDir))
        {
            File[] files;

            try
            {
                files = srcDir.listFiles();
            }
            catch(SecurityException e)
            {
                files = null;
                this.print("xCopy breaked: can't listFiles,may be caused by:");
                e.printStackTrace();
                return;
            }

            if(files == null)
            {
                return;
            }
            else
            {
                for(int i = 0; i < files.length; i++)
                {
                    String fileName = files[i].getName();
                    String absoluteFileName = files[i].getAbsolutePath();

                    if(files[i].isDirectory())
                    {
                        // 下一次递归的源目录
                           String subSrcDir = srcDir.getPath() + File.separator
                                + fileName;

                        // 下一次递归的目的目录
                           String subDestDir = destDir.getPath() + File.separator
                                + fileName;

                        try
                        {
                            new File(subDestDir).mkdir();
                        }
                        catch(SecurityException e)
                        {
                            this.print("can't mkdir in path : " + subDestDir);
                            this.print("xCopy breaked cause by: ");
                            e.printStackTrace();
                            return;
                        }

                        xCopy(subSrcDir, subDestDir);
                    }
                    else
                    {

                        String destFileName = destDirPath + File.separator
                                + fileName;
                        copyFile(absoluteFileName, destFileName);
                    }
                }
            }
        }
    }


    /**
     * 简单复制单个文件到目标路径。目标路径下的该文件必须有可写权限
     * 
     * @param srcFilePath
     * @param desFilePath
     */
    public void copyFile(String srcFilePath, String desFilePath)
    {
        int byteread = 0;
        InputStream in = null;
        FileOutputStream out = null;

        try
        {
            in = new FileInputStream(srcFilePath);
            out = new FileOutputStream(desFilePath);
        }
        catch(FileNotFoundException e)
        {
            e.printStackTrace();
        }

        byte[] buffer = new byte[1024];

        try
        {
            while((byteread = in.read(buffer)) != -1)
            {
                out.write(buffer, 0, byteread);
            }

            in.close();
            out.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args)
    {
        if(args.length == 1)
        {
            new FileSystem(args[0]);
        }
        else
        {
            new FileSystem(System.getProperty("user.dir", "c:\\"));
        }
    }
}


  • xcopy.rar (7.5 KB)
  • 描述: java xCopy源代码
  • 下载次数: 58
分享到:
评论
2 楼 iwindyforest 2008-07-10  
哦,谢谢EXvision的指点!
commons的FileUtils还没看到,所以不知道,
回去好好看下...
1 楼 EXvision 2008-07-09  
很销魂的轮子哦.
commons的FileUtils貌似帮lz写好了这些。

相关推荐

    windows xcopy 远程拷贝.bat

    windows xcopy 远程拷贝

    操作系统接口:Windows命令接口

    操作系统接口:Windows命令接口2。(2人) 为Windows操作系统建立兼容的DOS命令接口,文件与目录命令;具体命令:DIR, RD,CD,MD, DEL,MOVE,REN,XCOPY,命令格式可参照Windows的CMD.EXE或MS-DOS提供的命令;设计命令...

    一个类似于XCopy的程序(9KB)...

    XCopy是Windows操作系统中一个强大的文件和目录复制工具,能够实现深度复制,包括子目录及其内容。在这个VB程序中,开发者可能实现了自定义的文件复制逻辑,以在没有命令行环境或者需要更友好用户界面的情况下进行...

    模仿DOS命令XCopy的功能

    在Windows操作系统的历史中,DOS(磁盘操作系统)是一个早期的操作环境,其中许多实用命令如XCOPY用于高效的文件复制和管理。XCOPY命令是DOS环境中的一款强大的文件和目录复制工具,它支持多种选项,可以实现灵活的...

    VC++Dos 命令接口2(操作系统课程设计)

    设计任务 (1)为Windows操作系统建立兼容的DOS命令接口,文件与目录命令 (2)具体命令:DIR,RD,CD,MD,DEL,MOVE,REN,XCOPY,命令格式可参考Windows的CMD.EXE或MS-DOS提供的命令格式 (3)设计命令的名称,参数等...

    java 局域网拷贝文件

    在Java编程环境中,实现局域网内的文件拷贝是一项常见的任务,尤其对于系统集成、数据共享或备份场景。本文将详细讲解如何利用Java技术来复制局域网内其他计算机上的文件,并讨论如何替换文件调用路径片段以适应不同...

    bat代码 xcopy实现按键操作的实例

    xcopy 按键操作的实例 此代码可以实现横版游戏的任务控制或其他相关操作如系统操作

    操作系统课程设计:Windows 命令接口之文件与目录命令

    设计任务: (1) 为Windows操作系统建立兼容的DOS命令接口,文件与目录命令 (2) 具体命令:DIR,RD,CD,MD,DEL,MOVE,REN,XCOPY,命令格式可参考Windows的CMD.EXE或MS-DOS提供的命令格式 (3) 设计命令的名称,...

    XCOPY v1.1 汉化版

    - **兼容性**: 虽然DOS系统已不再主流,但XCOPY v1.1汉化版仍能很好地运行在Windows的DOS窗口或其他模拟DOS环境之中。 **5. 应用场景** - **系统备份**: 使用XCOPY可以方便地备份系统文件,特别是配合特定选项,如...

    64-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows x64 ODP.NET

    64-bit ODAC 11.2 Release 6 (11.2.0.4.0) Xcopy for Windows x64 [Released January 14, 2014] Download ODAC112040Xcopy_64bit.zip - 54.7 MB (57,388,125 bytes) Installation Instructions are ...

    ODAC122010Xcopy_x64

    - 确保目标系统满足64位Windows操作系统的要求。 - 理解并正确配置Oracle TNS(Transparent Network Substrate)设置,以便ODAC能够找到并连接到Oracle数据库实例。 - 安装后需要在应用程序配置文件中正确指定ODP...

    Xcopy超级拷贝工具 可以达到硬盘传输极限

    标题中的“Xcopy超级拷贝工具 可以达到硬盘传输极限”指的是Windows操作系统中的一个强大命令行工具——Xcopy(eXtended Copy)。Xcopy是DOS命令的一部分,它扩展了基本的复制命令(copy),提供了更多选项,使得...

    xcopy源代码

    本主题将深入探讨如何使用API编写一个类似于`xcopy`的功能,并将其集成到一个基于按钮操作文件的Windows窗体应用中。 首先,我们要了解Windows API中的几个关键函数,这些函数是实现`xcopy`功能的基础: 1. **...

    一个类似于XCopy的程序

    XCopy示例,可以象Dos下的XCopy命令一样。 欢迎访问小李飞刀的个人主页 VBFighter 主页地址 http://go.163.com/~lihui48 虚拟域名 http://vbifghter.126.com

Global site tag (gtag.js) - Google Analytics