【问题标题】:FileNotFoundException when reading a file, using absolute path使用绝对路径读取文件时出现 FileNotFoundException
【发布时间】:2025-12-08 05:45:01
【问题描述】:

我正在尝试使用绝对路径从文件系统读取文件,但由于“FileNotFoundException”而失败,我不知道为什么

File file=new File("E:\\Directory\\File.txt");
byte[] buff=new byte[8];
FileInputStream fileIn=new FileInputStream(file.getAbsolutePath());
int n=fileIn.read(buff);
System.out.println(n);

【问题讨论】:

  • 要确认文件存在,复制完整路径,删除多余的\并将其粘贴到Windows资源管理器中。

标签: java fileinputstream


【解决方案1】:

以下是一些可能导致此问题的因素:

  1. 文件不存在。 (你说这不是问题……)
  2. 该目录确实存在,但您的应用程序没有读取它的权限。
  3. 目录和文件存在,但您的真实路径名或您正在使用的路径名有问题:

    • 其中可能包含不可见/非打印字符。
    • 它可能有尾随空格字符,或不同数量的嵌入空格
    • 可能是同形字问题
  4. 实际错误发生在代码的其他地方。

  5. 不知何故,您实际运行的代码与您的源代码不匹配;例如您的编辑/编译/部署/运行过程存在方法问题。

我也可以建议你这样尝试吗:

File file = new File("E:/Directory/File.txt");
FileInputStream fileIn = new FileInputStream(file);

Java 路径名处理应将“/”转换为适当的平台特定文件分隔符。并且file 已经表示绝对路径,因此不需要调用file.getAbsolutePath()

【讨论】:

  • 3. 不会错,因为他的路径名不包含这些?
  • 他向我们展示的代码中的路径名没有这些,但是 1)这可能不是真正的代码,2)我们只有他的话,实际的路径名是他认为的它是。他会被建议(真的)检查这些东西。甚至重新检查它们。
  • 我同意,但我尽量利用我们所拥有的,而不是假设更多。
  • @ItamarGreen - 我认为它已经过去了。如果情况真的如他所描述的那样,这种情况是不可信的。
  • 是的,我正试图找出问题所在。 E 中的文件通常不需要访问权限,(如管理员访问)
【解决方案2】:

感谢您的帮助。我已经知道为什么了。因为它可能会抛出异常,所以我应该在方法签名中添加异常或用 try/catch 包围。 实际上,当您使用 Intelli IDEA 时,“Alt+Enter”可以帮助您找出您的代码出了什么问题.....

【讨论】:

    【解决方案3】:

    嗯,问题正是错误状态:

    文件不存在。即该路径中没有文件。您给构造函数的名称可能是错误的。 您可以通过以下方式检查文件是否存在:

    File file=new File("E:\\Directory\\File.txt");
    if(file.exists()){
    
        //do things here
    }
    

    您还可以从 Windows 资源管理器检查文件是否存在(假设您在 PC 上运行 Windows)。如果找不到该文件,则说明问题所在。正如我所说,抛出错误是因为没有具有该路径的文件。

    【讨论】:

    • 感谢您的回答,但我已经检查过了,该文件存在于该路径中。
    • 你用描述的方法检查了吗?
    • 我已经检查了 Java API。
    • @AdolphYoung 你到底是什么意思?
    • @AdolphYoung,好的。但我仍然不明白这有什么关系。你检查过file.exists() 是否返回 true 吗?