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

Java 为什么在linux中使用Files.copy()复制文件时,会出现NoSuchFileException。但在windows中工作正常。,java,linux,file,file-copying,java.nio.file,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() + Fi

嗨,我不得不把一个文件从一个文件夹复制到另一个文件夹。这是我的密码

    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中得到了例外。 注意:如果要询问我复制到的文件夹是否存在,答案是“是”。除此之外,例外情况是没有显示我将文件复制到的文件夹。它显示文件当前所在的文件夹

执行此代码时,将显示输入文件。但是为什么它没有看到这样的文件呢


请帮我找出这里的错误。

您必须能够创建文件,但不能使用文件类创建目录

只需在开始处抛出IOException,并提及文件名

将代码包装在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();
}

您必须能够创建文件,但不能使用文件类创建目录

只需在开始处抛出IOException,并提及文件名

将代码包装在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();
}

newFile.exist()的输出是什么?Java进程是否具有访问该文件和所有父目录的权限?这不太可能,因此可以帮助您解决问题。您确实应该检查源文件是否存在(类似于从运行程序的同一位置执行的
cat/folder1/folder2/folder3/abc.txt
,从*nix的角度看,您的程序应该显示文件是否确实存在)@Henry Yes它有权限。Hi@SercanOzdemir,newFile.exist()抛出false。但是为什么呢?我没有把文件移到任何地方。此时它已经存在。newFile.exist()的输出是什么?Java进程是否有权限访问该文件和所有父目录?这不太可能,因此可以帮助您解决问题。您确实应该检查源文件是否存在(类似于从运行程序的同一位置执行的
cat/folder1/folder2/folder3/abc.txt
,从*nix的角度看,您的程序应该显示文件是否确实存在)@Henry Yes它有权限。Hi@SercanOzdemir,newFile.exist()抛出false。但是为什么呢?我没有把文件移到任何地方。现在它已经存在了。我不想创建目录。我已经清楚地提到了目录已经存在,我并没有试图创建一个目录。我已经清楚地提到目录已经存在。