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

标签 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中得到异常。 注意:如果您要询问要复制到的文件夹是否存在,答案是肯定的。此外,异常(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/

相关文章:

linux - 如何使用 linux 内核模块获取盖子状态?

java - 使用\t 排列文件输出

PHP 启用 <?= ?>

java - SoapUI 中的大消息失败 - "Error getting response; java.net.SocketException: Connection reset"

android - 哪个设备文件接收我在 Android 上注入(inject)的 key ?

php - 在包含大量文件的文件夹中匹配文件名的更快方法

javascript - 使用angularjs加载多个图片文件

android - 从android中的sdcard读取特定文件

java - 带有改造 2.0 的 POST

java - 在 2 层和 3 层应用程序中使用表示层的 JDBC 连接