Java说FileNotFoundException但文件存在
我有一个CS课程的作业,上面写着读一个有几个测试分数的文件,并要求我对它们求和平均。虽然求和和平均很容易,但我在读取文件时遇到了问题。老师说要用这个语法
Scanner scores = new Scanner(new File("scores.dat"));
但是,这会抛出一个FileNotFoundException
,但是我已经反复检查了当前文件夹中是否存在该文件,之后,我认为它必须对权限进行处理。我为每个人更改了读写权限,但仍然不起作用,并且仍然抛出错误。有人知道为什么会发生这种情况吗
编辑:它实际上指向一个目录,但是,我已经解决了这个问题。现在file.exists()
返回true
,但是当我尝试将它放入Scanner
时,它抛出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);
}
}
# 1 楼答案
代码本身工作正常。问题是,程序的工作路径指向的位置与您想象的不同
使用此行并查看路径的位置:
# 2 楼答案
我最近发现了一个有趣的例子,当文件明显存在于磁盘上时,会生成FileNotFoundExeption。 在我的程序中,我从另一个文本文件读取文件路径并创建文件对象:
问题的原因是路径末尾包含不可见的
\r\n
字符对我来说,解决办法是:
概括来说,不可见/非打印字符可能包括空格或制表符,也可能包括其他字符,它们可能出现在路径的开头、结尾或嵌入到路径中。修剪在某些情况下有效,但并非所有情况下都有效。有几件事可以帮助您发现此类问题:
输出带有引号字符的路径名;e、 g
仔细检查输出中不应该出现的空格和换行符
使用Java调试器逐个字符仔细检查路径名字符串,查找不应该存在的字符。(同时检查同形文字字符!)
# 3 楼答案
一个对我有效的简单修复方法是将我的文件从src移到项目的主文件夹中。这不是最好的解决方案,但取决于项目的规模和您的时间,它可能是完美的
# 4 楼答案
显然有许多可能的原因,前面的答案很好地记录了这些原因,但以下是我在一个特定案例中解决这些问题的方法:
我的一个学生有这个问题,我为了想办法差点把头发扯掉。结果证明,该文件不存在,尽管看起来确实存在。问题在于Windows 7被配置为“隐藏已知文件类型的文件扩展名”这意味着,如果文件名为“data.txt”,则其实际文件名为“data.txt.txt”
希望这能帮别人省下一些头发
# 5 楼答案
根据文件的权限属性,操作系统可能会阻止文件的读写操作
如果您试图从文件中读取,那么我建议使用文件的setReadable方法将其设置为true,或者,例如以下代码:
如果您试图写入文件,我建议使用文件的setWritable方法将其设置为true,或者,例如以下代码:
# 6 楼答案
在一些情况下
FileNotFoundException
可能会在运行时抛出命名文件不存在。原因可能有很多,包括:
命名文件实际上是一个目录
由于某些原因,无法打开命名文件进行读取
好消息是,问题将不可避免地成为上述问题之一。这只是一个确定哪一个的问题。以下是一些您可以尝试的东西:
调用
file.exists()
将告诉您是否存在具有给定名称/路径名的文件系统对象调用
file.isDirectory()
将测试它是否是目录调用
file.canRead()
将测试它是否是可读文件此行将告诉您当前目录是什么:
此行将打印出路径名,以便更容易发现意外的前导或尾随空格:
在输出中查找意外的空格、换行符等
事实证明,您的示例代码存在编译错误
我运行您的代码时没有考虑Netbeans的投诉,结果得到以下异常消息:
如果您将代码更改为以下内容,它将修复这个问题
解释:将
Scanner(File)
构造函数声明为引发FileNotFoundException
异常。(扫描仪可能无法打开文件。)现在FileNotFoundException
是一个检查异常。这意味着可以抛出异常的方法必须捕获异常或在throws
子句中声明异常。上述修复采用后一种方法