【问题标题】:Cannot get Scanner to See File无法让扫描仪查看文件
【发布时间】:2016-01-02 20:57:37
【问题描述】:

我不明白为什么我不能让扫描仪读取我的 .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"));

表明我所在的目录是正确的。

其他人有什么想法吗?

【问题讨论】:

  • 您确定该文件确实存在吗?你能打开一个资源管理器并在路径中转储吗?
  • 第一种情况,文件需要在当前目录下,不一定是'类文件和源文件在同一个目录'。在第二种情况下,您一定是文件名错误。
  • 正如@Tim 正确指出的那样,路径是无效的。 Windows 路径应该包含反斜杠
  • @vikasn91 不,他们没有。我刚刚在 Windows 上运行的 IntelliJ 上进行了测试,它们都可以工作。
  • 不是 如果它们是正斜杠,只有反斜杠。如果他使用未转义的反斜杠,他的代码甚至不会编译,这会给他带来与他在此处发布的错误不同的错误。

标签: java io java.util.scanner java-io


【解决方案1】:

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

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

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

myFile().getCanonicalPath();
...

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

如果这没有任何结果,我们将需要更多信息:哪个版本的 java?如何启动java进程?

【讨论】:

  • 调用布尔方法并忽略它们的返回值究竟有什么意义?
  • 这只是对 J'Zargo 的提示,以找出问题所在 - 应该已经足够明显了(事实上,对于 J'Zargo 来说......)
  • 你还没有回答我问的问题。这没有提供问题的答案。它应该作为评论发布。
【解决方案2】:

检查您尝试访问的文件是否为read-only。如果是read-only,则取消选中它。或者你也可以试试这个:

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

【讨论】:

  • 对于纯文本文件,我认为权限不会成为问题,除非他明确修改它们。顺便说一句,我没有对你投反对票,是@EJP。
  • 为什么?他只是想从中读取。为什么只读权限会阻止阅读?您建议的代码更改也不会产生任何影响。
  • 读取时有时会抛出异常see here
  • @jcool 从只读文件读取不会导致异常。如果只读属性有问题,它会在打开时抛出异常,而不是在读取时抛出异常。 new Scanner(File) 将抛出与您的代码完全相同的 FileNotFoundException。在内部,它执行类似于您发布的代码的操作。没有任何改善。
  • @TimBiegeleisen 关于谁否决了这个答案,您的信息准确为零。这是一次无记名投票。你没有资格猜测它,更不用说将你的猜测作为事实发表。
【解决方案3】:

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

使用转义的反斜杠或正斜杠没有区别。

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

对比

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

两者都有效。

【讨论】:

  • 你怎么修的?如果您不提供解决方案,这不是答案。
猜你喜欢
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多