如果只在目录java中不存在文件时如何复制文件

时间:2014-04-13 16:45:37

标签: java file copy duplicates

我搜索得非常彻底,我相当确定没有人问过这个问题。然而,这可能是因为这完全是错误的方法。我曾经写过一个有效的java程序,它将文件从一个目录复制到另一个目录。如果该文件已经存在于相应的目录中,则会被异常捕获并重命名。我想将此程序用于另一个应用程序,为此我希望它在捕获异常时不执行任何操作,只需继续执行该程序而不复制该文件。我将使用它来修复大约18GB的文件,如果它甚至在捕获异常时打印了一个字符,那将是非常低效的。这是我到目前为止的代码:

import java.nio.file.*;
import java.io.IOException;
public class Sync
{
    public static void main(String[] args)
    {
        String from=args[0];
        Path to=FileSystems.getDefault().getPath(args[1]);
        copyFiles(from, to);
    }
    public static void copyFiles(String from, Path to)
    {
        try(DirectoryStream<Path> files= Files.newDirectoryStream(FileSystems.getDefault().getPath(from)))
        {
            for(Path f:files)
            {
                Files.copy(f, to.resolve(f.getFileName()));
                System.out.println(" "+f.getFileName()+" copied ");
            }
        }
        catch(FileAlreadyExistsException e)
        {
            //not sure
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }   
    }
}

有没有办法使用FileAlreadyExistsExcpetion来做到这一点?

1 个答案:

答案 0 :(得分:1)

我不会使用try / catch来执行用户逻辑,从编程的角度来看这是错误的,而且效率也不高。 我要做的是检查文件是否存在,并且该情况会跳过复制操作或做任何你想做的事情

for(Path f:files)
{
   //here use Files.exists(Path path, LinkOption... options)
   Files.copy(f, to.resolve(f.getFileName()));
   System.out.println(" "+f.getFileName()+" copied ");
}

这里的文件文档: http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html 祝你好运