【问题标题】:FileNotFoundException (Not a directory)FileNotFoundException(不是目录)
【发布时间】:2021-05-30 06:10:15
【问题描述】:

我已经尝试阅读一个文本文件超过一天了,但无论我做什么,它总是出错。

我将简化我的代码:

我有一个文件对象:

File file = new File(System.getProperty(user.dir) + "/src/com/ksa/voetje/savedFiles/savedSettings.txt");

如果我将目录打印出来,我会得到“/Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt”。

我还有一个扫描仪,这就是我不断出错的地方:

Scanner reader = null;
try {
   reader = new Scanner(file);
} catch (FileNotFoundException e) {
   e.printStackTrace();
} 

我不断收到 FileNotFoundException,即使文件在那里! 这是错误消息(reader = new Scanner(file) 在第 42 行):

java.io.FileNotFoundException: /Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt/Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt (Not a directory)
    at java.base/java.io.FileInputStream.open0(Native Method)
    at java.base/java.io.FileInputStream.open(FileInputStream.java:211)
    at java.base/java.io.FileInputStream.<init>(FileInputStream.java:153)
    at java.base/java.util.Scanner.<init>(Scanner.java:639)
    at com.ksa.voetje.savedFiles.FileReader.readLines(FileReader.java:42)
    at com.ksa.voetje.instellingen.previousSettings.SettingsReader.getPreviousSettings(SettingsReader.java:22)
    at com.ksa.voetje.instellingen.previousSettings.SettingsReader.<init>(SettingsReader.java:14)
    at com.ksa.voetje.instellingen.previousSettings.PreviousSettings.<init>(PreviousSettings.java:11)
    at com.ksa.voetje.display.DisplaySystem.<init>(DisplaySystem.java:94)
    at com.ksa.voetje.Main.start(Main.java:16)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)

错误告诉我我给文件的路径不是目录,我不明白为什么它会给我这个错误。

有人可以帮帮我吗?

【问题讨论】:

  • 在错误消息中的 url 是 /Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt/Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt 为什么路径重复两次?在使用扫描仪之前,您是否对路径对象进行了处理?
  • @onkarruikar 我没有注意到,我必须找出我的代码有什么问题

标签: java exception java-io filenotfoundexception file-not-found


【解决方案1】:

FileNotFoundException 在文件无法访问时也会抛出。确保您的文件具有允许 Java 访问它的正确权限。

我在代码中看到的另一件事是路径开始于 "/Users/"。不应该是"C:/Users/"吗?

【讨论】:

  • 不是权限问题。问题是路径被破坏了。该路径告诉操作系统savedSettings.txt“应该是”一个目录......但它不是。
  • 问题确实是路径被破坏了,我修复了它,然后还注意到我没有权限。另外,认为 C: 仅适用于 Windows?所以我必须检查我的程序是否也可以在 Windows 上运行。
【解决方案2】:

错误告诉我我给文件的路径不是目录,我不明白为什么它会给我这个错误。

因为您要求savedSettings.txt 解释为目录。

哦,是的,你做到了!

根据异常消息,这是您正在使用的文件的路径名:

 /Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/
 voetje/savedFiles/savedSettings.txt/Users/jonaseveraert/
 IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt

(为了便于阅读,我添加了一些换行符。)

注意第2行savedSettings.txt后面是/Users。为此,savedSettings.txt 需要解析为一个目录。显然,它没有。因此错误消息说“它不是目录”1.

问题在于您组装路径名的方式......或者您组装它的来源。

你说:

如果我将目录打印出来,我会得到“/Users/jonaseveraert/IdeaProjects/Voetje KSA/src/com/ksa/voetje/savedFiles/savedSettings.txt”。

不清楚您实际打印的是什么,但您传递给Scanner 构造函数的不是File 表示的路径名。异常消息不会说谎。


1 - 当然,异常消息有点误导。如果它说该路径中的某些内容无法解析为目录,那将更有帮助。但不幸的是,操作系统返回的错误信息是非特定的,Java 尝试找出哪个名称不是目录会很复杂(而且成本很高)。

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 2015-12-20
    相关资源
    最近更新 更多