piumnl
9/24/2017 - 12:19 AM

复制目录

  • preVisitDirectory - 一个路径被访问时调用
  • postVisitDirectory - 一个路径的所有节点被访问后调用。如果有错误发生,exception 会传递给这个方法
  • visitFile - 文件被访问时被调用。该文件的文件属性被传递给这个方法
  • visitFileFailed - 当文件不能被访问时,此方法被调用。Exception 被传递给这个方法。
  • 可以选择继承 SimpleFileVisitor。它帮你实现了上述方法,你只需 Override 你感兴趣的方法。
public static void copyFolder(File sourcePath, String targetPath) throws FileNotFoundException {  
    if (!sourcePath.exists()) { // 源目录不存在  

        throw new FileNotFoundException(sourcePath.getAbsolutePath() + "not found");  
    }  
    if (!new File(targetPath).exists()) { // 创建目标目录  

        new File(targetPath).mkdirs();  
    }  
    FileInputStream inputStream = null;  
       FileOutputStream outputString = null;  
       FileChannel channelIn = null;  
       FileChannel channelOut = null;  
       String targetFile = null;  
    for (File file: sourcePath.listFiles()) {  
        targetFile = targetPath + File.separator + file.getName();  
        if (file.isFile()) {  
            try {  
                inputStream = new FileInputStream(file);  
                outputString = new FileOutputStream(targetFile);  
                channelIn = inputStream.getChannel();  
                channelOut = outputString.getChannel();  
                channelIn.transferTo(0, channelIn.size(), channelOut);  
            } catch (IOException e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    inputStream.close();  
                    outputString.close();  
                    channelIn.close();  
                    channelOut.close();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        } else {  
            copyFolder(file, targetFile);  
        }  
    }  
}