Java 说 FileNotFoundException 但文件存在

2022-08-31 20:42:27

我有一个CS课程的作业,它说要读取一个包含多个测试分数的文件,并要求我对它们求和求平均值。虽然求和和平均很容易,但我在文件读取方面遇到了问题。讲师说要使用这种语法

Scanner scores = new Scanner(new File("scores.dat"));

但是,这会抛出一个,但是我已经一遍又一遍地检查了该文件是否存在于当前文件夹中,之后,我认为它必须对权限执行某些操作。我为每个人更改了读取和写入的权限,但它仍然不起作用,并且仍然不断抛出错误。有没有人知道为什么会发生这种情况?FileNotFoundException

编辑:它实际上指向一个目录,但是,我已经解决了这个问题。现在返回,但是当我尝试将其放入 ,它会抛出file.exists()trueScannerFileNotFoundException

这是我所有的代码

import java.util.Scanner;
import java.io.*;
public class readInt{
        public static void main(String args[]){
                File file = new File("lines.txt");
                System.out.println(file.exists());
                Scanner scan = new Scanner(file);
        }
}

答案 1

在很多情况下,可能会在运行时抛出 。FileNotFoundException

  1. 命名文件不存在。这可能出于多种原因,包括:

    • 路径名完全错误
    • 路径名看起来是正确的,但实际上是错误的,因为它包含您没有注意到的非打印字符(或同形异体字)
    • 路径名是相对的,并且相对于正在运行的应用程序的实际当前目录无法正确解析。发生这种情况通常是因为应用程序的当前目录不是您所期望或假设的目录。
    • 文件的路径已断开;例如,路径的目录名称不正确,路径上的符号链接断开,或者其中一个路径组件存在权限问题。
  2. 命名文件实际上是一个目录。

  3. 由于某种原因,无法打开命名文件进行读取。

好消息是,问题将不可避免地是上述问题之一。这只是一个弄清楚哪个的问题。您可以尝试以下操作:

  • 调用将告诉您是否存在任何具有给定名称/路径名的文件系统对象。file.exists()

  • 调用将测试它是否是目录。file.isDirectory()

  • 调用将测试它是否是可读文件。file.canRead()

  • 这一行将告诉您当前目录是什么:

      System.out.println(new File(".").getAbsolutePath());
    
  • 此行将以一种更易于发现意外前导或尾随空格等内容的方式打印出路径名:

      System.out.println("The path is '" + path + "'");
    

    在输出中查找意外的空格、换行符等。


事实证明,您的示例代码存在编译错误。

我在没有处理 Netbeans 投诉的情况下运行了您的代码,但只收到以下异常消息:

线程“main” java.lang.RuntimeException 中的异常:不可编译的源代码 - 未报告的异常 java.io.FileNotFoundException;必须被捕获或声明被抛出

如果将代码更改为以下内容,它将修复问题。

public static void main(String[] args) throws FileNotFoundException {    
    File file = new File("scores.dat");
    System.out.println(file.exists());
    Scanner scan = new Scanner(file);
}

说明: 构造函数被声明为引发异常。(发生扫描仪无法打开文件的情况。现在是已检查的异常。这意味着可能引发异常的方法必须捕获异常或在子句中声明异常。上述修复采用后一种方法。Scanner(File)FileNotFoundExceptionFileNotFoundExceptionthrows


答案 2

代码本身工作正常。问题是,程序工作路径指向您想象的其他地方。

使用此行并查看路径的位置:

System.out.println(new File(".").getAbsoluteFile());

推荐