【问题标题】:java.io.FileNotFoundException in eclipseeclipse 中的 java.io.FileNotFoundException
【发布时间】:2014-05-23 13:51:15
【问题描述】:

代码:

import java.io.*;
import java.util.Scanner;

public class Driver {

    private int colorStrength;
    private String color;

    public static void main(String[] args) throws IOException {

        String line, file = "strength.txt";

        File openFile = new File(file);
        Scanner inFile = new Scanner(openFile);

        while (inFile.hasNext()) {
            line = inFile.nextLine();
            System.out.println(line);
        }

        inFile.close();
    }
}

这是我正在为一个类编写的程序的一小部分(我知道这两个私有属性尚未使用)但是当我尝试使用 strength.txt 文件运行它时,我收到以下错误:

例外:

Exception in thread "main" java.io.FileNotFoundException: strength.txt (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at Driver.main(Driver.java:14)

如果有 Eclipse 的任何人可以帮助我解决这个问题,将不胜感激!

【问题讨论】:

  • strength.txt 是否与Driver.class 位于同一位置?
  • 是的。我把它保存在程序的 src 文件夹以及 Project 文件夹中
  • 不是。 @PM77-1 要求您检查它是否与 Driver.class 位于同一位置。如果您查看 bin 目录,您只会看到 Driver.class ,除非您在任一答案中进行以下提到的更改。
  • 和Driver.class一起在bin目录下还是不行
  • 好的。检查拼写。

标签: java eclipse filenotfoundexception


【解决方案1】:

您使用了相对于您的项目执行的相对文件路径。

如果您想这样做,只需将strength.txt 文件放在项目的基本目录 中。像这样:

或者,您可以引用系统上的absolute 文件路径。例如,使用:

窗户:

C:/dev/myproject/strength.txt

Mac/Unix:

/Users/username/dev/strength.txt

(或任何可能的完整路径)。

【讨论】:

  • 我按照您所说的将文件放入基本目录,但它仍然给我相同的错误代码。您还有其他建议吗?
  • 嗯,对我有用。无论如何,然后使用系统上的完整路径。请记住,文件路径依赖于系统,因此在 Windows 机器上运行它会得到与 Mac/Unix 机器不同的结果。
  • 应该可以的。尝试打印下面提到的绝对路径,并告诉我们你得到了什么
【解决方案2】:

这样做

System.out.println(openFile.getAbsolutePath());

它会告诉你 JVM 期望在哪里找到文件以及它是否也是你期望的文件夹,相应地放置文件或给出确切的位置

【讨论】:

  • 如果您执行上述操作,您会看到您的文件位于 C:\Harley\Test\strength.txt 中,即:它需要项目基础目录中的文件。
【解决方案3】:

使用它来查看系统使用什么文件路径来到达相对路径

    System.out.print(System.getProperty("user.dir"));

然后确保相对路径紧跟该路径。

你也可以把它变成一个字符串

String filePath = System.getProperty("user.dir");

然后你可以像这样将它添加到文件路径的开头,

    ImageIcon imageIconRefVar = new ImageIcon(filePath + "/imagepathname");

当我在路径中使用它时,我发现这解决了我的问题(这似乎很奇怪,因为它应该是它所在的位置,但它确实有效)

【讨论】:

    【解决方案4】:

    您使用了相对于您的项目执行的相对文件路径。

    如果这对您有用,您可以通过以下方式将执行目录从项目根目录更改为二进制目录:

    1. “运行”->“运行配置”
    2. 在“参数”选项卡中,找到“工作目录”设置。
    3. 从“默认”切换到“其他”。
    4. 点击“工作区”按钮,在弹出的窗口中选择项目,然后点击“确定”;这将为您带来类似$(workspace_loc:proj-1) 的信息。
    5. 将“/bin”附加到它的末尾;保存配置。

    我需要这个而不是在我做作业时简单地将文件放在项目根目录中并且教授需要特定的文件层次结构;此外,这比绝对路径更便携。

    【讨论】:

      【解决方案5】:

      在基本目录中创建一个文件夹,将其命名为“res”。将您的文件放在“res”文件夹中。

      使用String file = ".\\res\\strength.txt"; 引用文件的位置。

      您应该使用资源文件夹来存储您在程序中使用的所有文件(一个好的做法)。

      然后从您的根目录中引用该文件。所以该文件存在于包中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        相关资源
        最近更新 更多