2015-10-06 134 views
0

我无法理解为什么我无法让扫描仪读取我的.txt文件。最后,我采取了将数据作为字符串存储在我的程序中。但我仍然想知道为什么Scanner没有看到这个文件。无法让扫描仪查看文件

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

显示我所在的目录是正确的。

其他人有什么想法?

+1

你确定这个文件真的存在吗?你能打开一个资源管理器并在路径中转储吗? –

+0

在第一种情况下,文件需要位于当前目录中,而不一定是“类文件和源文件所在的目录”。在第二种情况下,你必须弄错文件名。 – EJP

+0

正如@Tim正确指出的那样,路径是无效的。Windows路径应该包含反斜杠 – 2015-10-06 04:17:54

回答

-1

剥离下来的问题,只有文件开始:或者你也可以尝试这个

File myFile = new File("Test.txt"); 
myFile.exists(); 
myFile.canRead(); 
... 

然后继续分析该文件的路径:

myFile().getCanonicalPath(); 
... 

如果java进程能够访问该文件,则扫描程序不会有任何问题。

如果这不会导致任何地方,我们将需要更多的信息:哪个版本的Java?你如何开始Java过程?

+0

调用布尔方法并忽略它们的返回值究竟是什么? – EJP

+0

这只是J'Zargo为了追踪这个问题应该怎么做的一个提示 - 应该已经足够明显了(并且对于J'Zargo来说,事实上......) – Torgeist

+0

您还没有回答该问题我问。这并不能解答这个问题。它应该作为评论发布。 – EJP

0

检查您尝试访问的文件是否为read-only。如果是read-only则取消选中它。通过省略扫描仪

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

对于纯文本文件,我不认为权限会成为问题,除非他明确地修改它们。顺便说一下,我并没有让你失望,它是@EJP。 –

+0

为什么?他只是试图从中读取它。为什么只读权限会阻止阅读?您提出的代码更改也不会产生任何影响。 – EJP

+0

它有时可能会在读取时引发异常[请参阅此处](http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html) – jcool

-1

好吧,我修好了。看来Torgeist是对的。它确实有助于消除这个问题。使用exists()canRead()是非常有用的,因为它们返回false。即使我复制并粘贴,我在进入的确切文件路径中一定有错误。奇怪......只有其他可能的解释是,某些东西阻止了对桌面的访问,但这似乎不太可能。

使用逃逸的反斜杠或正斜杠没有区别。

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

File file = new File("C:\\Users\\OCB\\Documents\\Testing.txt"); 

都工作。

+0

你修好了吗?如果你不提供解决方案,这不是一个答案。 – EJP