Java 使用绝对路径读取文件时FileNotFoundException

Java 使用绝对路径读取文件时FileNotFoundException,java,fileinputstream,Java,Fileinputstream,我试图使用绝对路径从文件系统读取文件,但由于“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); 那么,问

我试图使用绝对路径从文件系统读取文件,但由于“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);

那么,问题正是错误所说的:

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

File file=new File("E:\\Directory\\File.txt");
if(file.exists()){

    //do things here
}

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

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

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

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

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

  • 我也可以建议你这样做:

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

    Java路径名处理应将“/”转换为相应的平台特定文件分隔符。而且
    file
    已经表示绝对路径,所以调用
    file.getAbsolutePath()
    应该没有必要。

    谢谢您的帮助。我已经知道原因了。因为它可能会引发异常,所以我应该将异常添加到方法签名中,或者用try/catch环绕。
    实际上,当您使用Intelli IDEA时,“Alt+Enter”可以帮助您找出代码的错误…..

    谢谢您的回答,但我已经检查了,文件存在于此路径中。您是否使用所述方法进行了检查?我已经检查了Java API。@Adolphyong您的确切意思是什么?@Adolphyong,好的。但我还是不明白这有什么关系。你有没有检查过
    file.exists()
    是否返回true?如果他的路径名不包含这些路径名,那么
    3是不是错了?他向我们展示的代码中的路径名没有这些路径名,但是1)这可能不是真正的代码,2)我们只听到他的话,实际的路径名是他认为的。他会被建议(真的)检查这些东西。甚至重新检查。我同意,但我试着利用我们现有的,而不是假设更多。@Itamagreen-我想这已经过去了。如果情况真的如他所描述的那样,那么这种情况是不可信的。是的,我正在努力找出问题所在。E中的文件通常不需要访问权限(如管理员访问),要确认文件存在,请复制完整路径,删除多余的\并将其粘贴到windows资源管理器。