标签: nosuchfileexception

从 Batch 应用程序中的 Files.move 获取 java.nio.file.NoSuchFileException

背景

这是一个多线程批处理应用程序,每个线程都有自己的文件。我在其他地方有逻辑,可以在文件创建失败的情况下阻止文件重命名。

该进程作为守护进程运行,每天生成数千个文件。此异常可能每 3 天发生 1 个文件,因此我们使用的方法在大多数情况下都有效。

运行该批处理的机器是Red Hat Enterprise Linux Server release 6.7 (Santiago)

Java版本是1.8.0_162

临时文件名是通过附加 java.util.UUID 中 UUID.randomUUID() 的结果生成的。

真实的文件名可能有重复,这就是为什么我们使用 rand UUID 而不是 .tmp 作为临时文件名。这应该不是问题,因为移动部分位于同步块中。

例外

2018-07-26 15:06:01,743 ERROR (ProcessRecordsTask.java:renameFileAfterProcess():674)  - Error: Unable to rename file:
java.nio.file.NoSuchFileException: /logs/apps/appname/FILNAMESTUFF_07_26_2018_15_05_51.xml.5c80331c-3b7e-4e16-90d7-c0d7810451c5 -> /logs/apps/appname/FILNAMESTUFF_07_26_2018_15_05_51.xml
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixCopyFile.move(UnixCopyFile.java:396)
        at sun.nio.fs.UnixFileSystemProvider.move(UnixFileSystemProvider.java:262)
        at java.nio.file.Files.move(Files.java:1395)
        at com.filetransferbatch.task.ProcessRecordsTask.renameFileAfterProcess(ProcessRecordsTask.java:664)
        at com.filetransferbatch.task.ProcessRecordsTask.saveFileData(ProcessRecordsTask.java:349)
        at com.filetransferbatch.task.ProcessRecordsTask.xmlTransfer(ProcessRecordsTask.java:244)
        at com.filetransferbatch.task.ProcessRecordsTask.call(ProcessRecordsTask.java:162)
        at com.filetransferbatch.task.ProcessRecordsTask.call(ProcessRecordsTask.java:62)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)

我从以下代码片段中得到异常:

private boolean renameFileAfterProcess(String tmpFileName) {
    boolean fileRenamed …
Run Code Online (Sandbox Code Playgroud)

java nio nosuchfileexception

6
推荐指数
1
解决办法
4978
查看次数

File.exists() 有效,但 Files.readAllBytes() 因 NoSuchFileException 而失败

我正在尝试用 Java 读取文本文件,但我得到NoSuchFileException.

我试图检查文件路径是否存在并返回true。这是我的代码。

            final File actualFile = new File(filePath);
            if (actualFile.exists()) {
                log.info("ACTUALFILE exists");
            } else {
                log.info("ACTUALFILE does not exist");
            }

            String content = new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)

我得到以下异常。

ACTUALFILE exists

java.nio.file.NoSuchFileException: my-file.json
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) ~[?:1.8.0_201]
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) ~[?:1.8.0_201]
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) ~[?:1.8.0_201]
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) ~[?:1.8.0_201]
at java.nio.file.Files.newByteChannel(Files.java:361) ~[?:1.8.0_201]
at java.nio.file.Files.newByteChannel(Files.java:407) ~[?:1.8.0_201]
at java.nio.file.Files.readAllBytes(Files.java:3152) ~[?:1.8.0_201]

Run Code Online (Sandbox Code Playgroud)

为什么 Files.readAllBytes() 无法找到文件?我在这里错过了什么吗?

[更新 1] 这是文件权限-rwxr-xr-x

java file relative-path nosuchfileexception

6
推荐指数
0
解决办法
540
查看次数

即使要复制的文件确实存在,Files.copy 也会抛出 java.nio.file.NoSuchFileException

我对一个看似简单的应用程序有疑问。它应该做什么:

-读出(硬编码)目录的文件(*.jpg)

-使用所述 jpg 包含的元数据(通过实现的库获得)生成目录(./year/month/)

- 将文件复制到相应的目录中。

它没有什么: - 将文件复制到相应的目录中,因为它找不到原始文件(它之前自己读出的)。老实说,我不知道为什么会这样。

这里是源代码:

package fotosorter;

import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Date;

public class Fotosorter {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) throws JpegProcessingException, IOException {
    File startdir = new File(System.getProperty("user.dir"));
    FileFilter jpg = new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getAbsoluteFile().toString().toLowerCase().endsWith(".jpg");
        }
    };

    File dir = new File(startdir, "bitmaps"+File.separator+"java-temp"); …
Run Code Online (Sandbox Code Playgroud)

java copy file nosuchfileexception

5
推荐指数
1
解决办法
8614
查看次数

Cygwin /cygdrive/c 没有这样的文件或目录

主机系统:Windows Server 2008 32-bit
安装:Cygwin

我不知道这个问题是什么时候开始的,但我的一个 Rails gems 使用该命令which来确定系统安装的可执行文件的位置。在我的情况下,它返回/cygdrive/c/Windows/System32/pngcrush- 并且文件无法访问。

在 cygwin 终端和 Windows cmd 中,我得到以下信息:

ls -la /cygdrive/c = No such file or directory

mount =

C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
B: on /cygdrive/b type smbfs (binary,posix=0,user,noumount,auto
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
Run Code Online (Sandbox Code Playgroud)

cd /在 Windows 终端中运行将我带到C:\

cd /cygdrive = The system cannot find the path specified

进一步编辑:

我可以访问使用的驱动器/c …

mount cygwin nosuchfileexception

5
推荐指数
1
解决办法
3万
查看次数

无法使用Paths.get()从Maven资源加载文件

我为这个看似简单且几乎是一个愚蠢的问题道歉,但我花了很多时间来修复它而没有太大的成功.

我创建了一个非常简单的maven项目,然后在这个src/resources文件夹中创建了一个简单的文本文件.

在此输入图像描述

在此输入图像描述

pom.xml很简单.这个App类看起来像这样:

public class App {
    public static void main(String[] args) throws IOException {
        Files.lines(Paths.get("test.txt")).forEach(System.out::println);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的例外:

Exception in thread "main" java.nio.file.NoSuchFileException: test.txt
    at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
    at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
    at sun.nio.fs.WindowsFileSystemProvider.newByteChannel(WindowsFileSystemProvider.java:230)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
    at java.nio.file.Files.newInputStream(Files.java:152)
    at java.nio.file.Files.newBufferedReader(Files.java:2784)
    at java.nio.file.Files.lines(Files.java:3744)
    at java.nio.file.Files.lines(Files.java:3785)
    at com.rahul.App.main(App.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

这似乎是一个非常愚蠢的问题,但我无法理解它.任何帮助都是真诚的感谢.

java filenotfoundexception maven java-8 nosuchfileexception

3
推荐指数
1
解决办法
992
查看次数

.jar中的NoSuchFileException但不包含在Eclipse中

当我在Eclipse中编译并运行我的程序时,运行没有异常.但是当我将它导出到可运行的jar或普通jar时,它找不到我的设置文件.

我的道路是:

String path= "src/settings/settings.ini";
Run Code Online (Sandbox Code Playgroud)

在eclipse中它运行无例外,但在jar中,它会立即抛出异常.

怎么可能让jar像日食一样工作?

java eclipse jar embedded-resource nosuchfileexception

2
推荐指数
1
解决办法
711
查看次数