一尘不染

Java新的File()表示FileNotFoundException但文件存在

java

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

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

但是,这会引发FileNotFoundException,但是我一遍又一遍地检查了该文件是否存在于当前文件夹中,然后,我发现它必须对权限进行处理。我更改了所有人的读写权限,但是它仍然无法正常工作,并且仍然不断抛出错误。有谁知道为什么会这样?

编辑:它实际上是指向一个目录了,但是,我已经解决了这个问题。file.exists()返回true,但是,当我尝试将其放入扫描仪时,它将引发filenotfoundexception

这是我的全部代码

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);
        }
}

阅读 815

收藏
2020-03-06

共1个答案

一尘不染

在许多情况下FileNotFoundException,运行时可能会引发a 。

命名文件不存在。原因可能有很多,其中包括:

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

由于某种原因,无法打开指定文件进行读取。
好消息是,问题将不可避免地是上述之一。只是确定哪一个问题。您可以尝试以下操作:

  • 调用file.exists()将告诉您是否存在具有给定名称/路径名的文件系统对象。
  • 调用file.isDirectory()将测试它是否是目录。
  • 调用file.canRead()将测试该文件是否可读。
  • 此行将告诉您当前目录是什么:
System.out.println(new File(".").getAbsolutePath());
  • 此行将以某种方式打印出路径名,从而更容易发现意外的前导或训练性空白:
System.out.println("The path is '" + path + "'");

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

事实证明您的示例代码有一个编译错误。

我运行您的代码时并没有处理Netbeans的投诉,只是得到以下异常消息:

线程“主”中的异常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)构造函数被声明为引发FileNotFoundException异常。(碰巧扫描程序无法打开文件。)现在FileNotFoundException是一个已检查的异常。这意味着可能引发异常的方法必须捕获异常或在throws子句中声明它。上面的修复采用了后一种方法。

2020-03-06