日期:2014-05-20  浏览次数:20761 次

大神给我看看这个方法有什么问题
我想要这个方法能复制文件或者目录,可是当复制目录的时候,如果这个目录里面有对个子项,只能复制里面的一个子项  大神给看看啊


**
     * 复制文件或者目录
     * @param srcFile:原始文件或目录
     * @param desFile:目标文件或目录
     * 
     */
      
    public static void copyFile(File srcFile, File desFile)throws Exception {
        RandomAccessFile srcSaf = null;
        RandomAccessFile desSaf = null;
          
        try {
            // 如果要复制的是文件夹,要先创建文件夹
            if(srcFile.isDirectory()){
                desFile.mkdir();
                for(File sub : srcFile.listFiles()){
                        File newFile = new File(desFile, sub.getName());
                          
                        copyFile(sub, newFile);
                }
            }
            // 文件的复制
            srcSaf = new RandomAccessFile(srcFile, "r");
            desSaf = new RandomAccessFile(desFile, "rw");
              
            byte[] buf = new byte[1024*10];
            int len = 0;
            while((len = srcSaf.read(buf)) != -1){
                desSaf.write(buf, 0, len);
            }
              
        } catch (FileNotFoundException e) {
            throw e;
        } finally{
            srcSaf.close();
            desSaf.close();
        }
    }

------解决方案--------------------

public static void copyFile(File srcFile, File desFile) {
RandomAccessFile srcSaf=null;
RandomAccessFile desSaf=null;
// 如果要复制的是文件夹,要先创建文件夹
if (srcFile.isDirectory()) {
desFile.mkdir();
for (File sub : srcFile.listFiles()) {
File newFile=new File(desFile,sub.getName());
copyFile(sub,newFile);
}
} else {
// 文件的复制
try {
srcSaf=new RandomAccessFile(srcFile,"r");
desSaf=new RandomAccessFile(desFile,"rw");
byte[] buf=new byte[1024*10];
int len=0;
while ((len=srcSaf.read(buf))!=-1) {
desSaf.write(buf,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
srcSaf.close();
desSaf.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
}