您好,我必须将一个文件从一个文件夹复制到另一个文件夹。这是我的代码。
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中得到异常。 注意:如果您要询问要复制到的文件夹是否存在,答案是肯定的。此外,异常(exception)情况是不显示正在将文件复制到的文件夹。它显示文件当前所在的文件夹。
执行此代码时存在输入文件。但为什么它会看到 NoSuchFile?
请帮我看看这里有什么问题。
最佳答案
您必须能够创建文件,但不能使用 File 类创建目录。
只需在开头抛出 IOException 并提及文件名即可。
或
将代码包装在try block 中并捕获运行时指定的异常,然后在第二行指定文件名。
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();
}
关于java - 为什么在 Linux 中使用 Files.copy() 复制文件时出现 NoSuchFileException。但在 Windows 中工作正常。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34328049/