Java 无法使扫描仪查看文件

Java 无法使扫描仪查看文件,java,io,java.util.scanner,java-io,Java,Io,Java.util.scanner,Java Io,我不明白为什么我不能让扫描仪读取我的.txt文件。最后,我求助于将数据作为字符串存储在程序中。但我仍然想知道为什么扫描仪没有看到这个文件 Scanner scan = new Scanner(new File("Test.txt")); 我也试过: Scanner scan = new Scanner(new File("C:/Users/myusername/Desktop/Test.txt")); 两者都会导致抛出FileNotFoundException 文本文件位于类文件和源文件所在

我不明白为什么我不能让扫描仪读取我的.txt文件。最后,我求助于将数据作为字符串存储在程序中。但我仍然想知道为什么扫描仪没有看到这个文件

Scanner scan = new Scanner(new File("Test.txt"));
我也试过:

Scanner scan = new Scanner(new File("C:/Users/myusername/Desktop/Test.txt"));
两者都会导致抛出FileNotFoundException

文本文件位于类文件和源文件所在的同一目录中

有人知道怎么了吗

好吧,这真的很糟糕。我只是不知道为什么会这样。我知道这个文件确实存在

System.out.println(System.getProperty("user.dir"));
显示我所在的目录是正确的


其他人有什么想法吗?

检查您试图访问的文件是否为只读文件。如果它是只读的,则取消选中它。或者您也可以尝试以下方法:

FileInputStream fis=new FileInputStream(new File("C:/Users/myusername/Desktop/Test.txt"));
Scanner scan=new Scanner(fis);

通过省略扫描仪并仅从文件开始解决问题:

File myFile = new File("Test.txt");
myFile.exists();
myFile.canRead();
...
然后继续分析文件的路径:

myFile().getCanonicalPath();
...
如果java进程能够访问该文件,扫描器就不会有任何问题


如果这还不能带来任何结果,我们需要更多的信息:java的哪个版本?如何启动java进程?

好的,我已经修复了它。看来Torgeist是对的。这确实有助于解决问题。使用
exists()
canRead()
非常有用,因为它们返回false。在某个地方,我输入的确切文件路径肯定有问题,即使我复制并粘贴了。奇怪…唯一可能的解释是有什么东西阻止了对桌面的访问,但这似乎不太可能

使用转义反斜杠或正斜杠没有什么区别

File file = new File("C:/Users/UserName/Documents/Testing.txt");
vs


两种方法都有效。

您确定文件确实存在吗?可以打开资源管理器并在路径中转储吗?在第一种情况下,文件需要位于当前目录中,而不一定是“类文件和源文件所在的同一目录”。在第二种情况下,您一定是文件名弄错了。正如@Tim正确指出的,路径是无效的。Windows路径应该包含backslashes@vikasn91不,他们没有。我刚刚在运行在Windows上的IntelliJ上测试了这两种方法,它们都能工作。但如果它们是正斜杠,则不能,只有反斜杠。如果他使用了未替换的反斜杠,他的代码甚至无法编译,这将给他带来一个与他在这里发布的错误不同的错误。对于纯文本文件,我认为权限不会是一个问题,除非他明确地修改它们。顺便说一句,我没有否决你,是@EJP。为什么?他只是想从中读出来。为什么只读权限会阻止读取?您建议的代码更改也不会产生任何影响。它有时可能会在读取@jcool时引发异常。从只读文件读取@jcool不会导致异常。如果只读属性有问题,它将在打开时抛出异常,而不是在读取时抛出异常
newscanner(File)
将抛出与代码完全相同的
FileNotFoundException
。在内部,它执行与您发布的代码类似的操作。“没有任何改善。”TimBiegeleisen关于谁否决了这个答案,你完全没有任何信息。这是无记名投票。你没必要去猜测它,更不用说把你的猜测作为事实公布了。你是怎么解决的?如果你不提供解决方案,这就不是答案。调用布尔方法并忽略其返回值到底有什么意义?这只是给J'Zargo的提示,告诉他如何追踪问题——应该已经足够明显了(事实上,这是给J'Zargo的…),你还没有回答我问的问题。这并不能回答这个问题。它应该作为评论发布。
File file = new File("C:\\Users\\OCB\\Documents\\Testing.txt");