异常: 系统找不到指定的文件

我有一个名为“ word.txt”的文件。

它与我的 java文件在同一个目录中。

但是,当我尝试在以下代码中访问它时,就会发生 找不到文件错误:

Exception in thread "main" java.io.FileNotFoundException: word.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 Hangman1.main(Hangman1.java:6)

这是我的密码:

import java.io.File;
import java.util.*;


public class Hangman1 {
public static void main(String[] args) throws Exception {
Scanner input = new Scanner(new File("word.txt"));
String in = "";
in = input.nextLine();
}
}
501728 次浏览

可以使用相对路径,但它们可能比较棘手。最好的解决方案是知道你的文件被保存在哪里,也就是说,打印文件夹:

import java.io.File;
import java.util.*;


public class Hangman1 {


public static void main(String[] args) throws Exception {
File myFile = new File("word.txt");
System.out.println("Attempting to read from file in: "+myFile.getCanonicalPath());


Scanner input = new Scanner(myFile);
String in = "";
in = input.nextLine();
}


}

此代码应打印所查找的文件夹。把文件放在那里,你就可以走了。

直接将 word. txt 作为项目根文件夹的子文件和 src 的对等文件

Project_Root
src
word.txt

免责声明: 我想解释一下为什么这个方法适用于这个特殊的情况,以及为什么它可能不适用于其他情况。

原因:

当您使用 File或任何其他 FileXxx变体时,您正在文件系统上寻找相对于 工作目录的文件。工作目录可以这样描述:

从命令行运行时

C:\EclipseWorkspace\ProjectRoot\bin > java com.mypackage.Hangman1

工作目录是 C:\EclipseWorkspace\ProjectRoot\bin。使用 IDE (至少是我使用过的所有 IDE) ,工作目录就是 ProjectRoot。因此,当文件位于 ProjectRoot中时,只使用文件名作为相对路径是有效的,因为它位于工作目录的根目录。

类似地,如果这是您的项目结构 ProjectRoot\src\word.txt,那么路径 "src/word.txt"将是有效的。

为什么它可能不工作

首先,工作目录总是可以改变的。例如,像上面的例子一样,从命令行运行代码,工作目录是 bin。因此,在这种情况下,它将失败,因为没有 bin\word.txt

其次,如果您要将这个项目导出到一个 jar 中,并且将文件配置为包含在 jar 中,那么它也会失败,因为路径也将不再有效。

也就是说,您需要确定文件是否是 (或者仅仅是“资源”——有时候我会交替使用的术语)。如果是这样,那么您需要将该文件构建到类路径中,并通过 URL 访问它。在这种情况下,您需要做的第一件事情是确保文件将 建造放入类路径。如果该文件位于项目根目录中,则必须将生成配置为包含该文件。如果将文件放在 src或下面的某个目录中,那么默认构建应该将其放在类路径中。

可以通过多种方式访问类路径资源。您可以使用 Class类,该类具有 getResourceXxx方法,您可以从中获取类路径资源。

例如,如果您将项目结构更改为 ProjectRoot\src\resources\word.txt,您可以使用以下命令:

InputStream is = Hangman1.class.getResourceAsStream("/resources/word.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));

返回一个 InputStream,但是从底层获得一个 URL。或者,你可以得到一个 URL,如果这是你需要的。getResource()将返回一个 URL

对于 Maven 用户,其目录结构类似于 src/main/resourcesresources文件夹的内容放在类路径的根目录下。因此,如果您有一个文件在那里,那么您将只使用 getResourceAsStream("/thefile.txt")

您的文件应该直接在项目文件夹下,而不是在任何其他子文件夹中。

如果你的项目文件夹是以例如 AProject命名的,那么它应该和你的 src文件夹在同一个位置。

Aproject
src
word.txt

我认为它总是沸腾到 classpath。已经说过,如果你从同一个文件夹运行。类然后改变 Scanner input = new Scanner(new File("word.txt"));Scanner input = new Scanner(new File("./word.txt"));应该工作

在创建 txt 文件时,请确保不要键入名称“ name.txt”,只要键入“ name”即可。如果键入“ name.txt”,Eclipse 将看到“ name.txt.txt”。这个解决了我的问题。还将文件保存在 src 文件夹中,而不是被。Java 居住,一个文件夹了。

我从一个属性文件中读取路径,没有提到最后有一个空格。 确保你没有。

我也有同样的问题,但你知道为什么吗?因为我没有。在我的文件的最后,所以它是文件不是文本文件,你应该只做两件事:

  1. 将您的文本文件放在根目录中(例如,如果您有一个名为 HelloWorld 的项目,只需右键单击包目录中的 HelloWorld 文件并创建 File)
  2. 另存为任何名称的文件,但最后以. txt 结尾 我想你的问题已经解决了,但我写给其他人知道。 谢谢。

尝试使用代码创建一个文件,这样您将了解系统创建文件的路径

File test=new File("check.txt");
if (test.createNewFile()) {
System.out.println("File created: " + test.getName());
}