为什么在使用Files.copy()在linux中复制文件时会出现NoSuchFileException。但在Windows中工作正常。

时间:2015-12-17 06:32:59

标签: java linux file file-copying java.nio.file

您好我必须将文件从一个文件夹复制到另一个文件夹。这是我的代码。

    File newFile = new File("/folder1/folder2/folder3/abc.txt");
    File currentFolder = new File("/folder1/folder2/folder4/" + File.separator);
    Files.copy(newFile.toPath(), new File(currentFolder.getPath() + File.separator + newFile.getName()).toPath(),
                StandardCopyOption.REPLACE_EXISTING);

这对我之前使用的所有模块都很好。但仅针对一个特定模块,它会抛出以下错误

java.nio.file.NoSuchFileException: /folder1/folder2/folder3/abc.txt
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixCopyFile.copy(UnixCopyFile.java:520)
at sun.nio.fs.UnixFileSystemProvider.copy(UnixFileSystemProvider.java:253)
at java.nio.file.Files.copy(Files.java:1227)
at com.saru.utils.copyNewFileToReferenceFolder(Unknown Source)
at com.saru.utils.FileProcessorSaru.processingIncomingFile(Unknown Source)
at com.saru.utils.FileProcessorSaru.processOracleFinancial(Unknown Source)
at com.saru.utils.FileProcessorSaru.run(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

相同的代码在Windows中正常工作。但是在linux中获得异常。 注意:如果您要询问是否存在要复制的文件夹,则答案为是。除了异常没有显示复制文件的文件夹。它显示文件当前所在的文件夹。

执行此代码时,输​​入文件存在。但为什么它看到NoSuchFile?

请帮我找到问题所在。

1 个答案:

答案 0 :(得分:0)

您必须能够创建文件,但无法使用File类创建目录。

在开始时抛出 IOException 并提及fileName。

OR

将代码包装在try块中,捕获运行时指定的异常,然后在第二行指定文件名。

try {
    File newFile = new File("/folder1/folder2/folder3/abc.txt");
    File currentFolder = new File("/folder1/folder2/folder4/mention_file_name_here" +      File.separator);
    Files.copy(newFile.toPath(),new File(currentFolder.getPath() +File.separator + newFile.getName()).toPath(),StandardCopyOption.REPLACE_EXISTING);

}catch(IOException e) {
    e.printstacktrace();
}