当前位置: 首页 > 知识库问答 >
问题:

java.io。FileNotFoundException:系统找不到指定的文件

拓拔奇
2023-03-14

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

它与我的< code>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();          
    }
}

共有3个答案

孙清野
2023-03-14

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

如果您项目的文件夹以例如AProject命名,它应该与您的src文件夹位于同一位置。

Aproject
        src
        word.txt
屠晟睿
2023-03-14

可以使用相对路径,但它们可能很棘手。最好的解决方案是知道您的文件保存在哪里,即打印文件夹:

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();
    }

}

这段代码应该打印出它所寻找的文件夹。把文件放在那里,你就可以走了。

夏立果
2023-03-14

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

Project_Root
    src
    word.txt

免责声明:我想解释为什么这适用于这种特殊情况,以及为什么它可能不适用于其他人。

为什么有效:

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

从命令行运行时

< code > C:\ eclipse workspace \ project root \ bin

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

类似地,如果这是您的项目结构< code > project root \ src \ word . txt ,那么路径< code >“src/word . txt”将是有效的。

为什么它可能不起作用

首先,工作目录总是可以更改的。例如,如上例所示,从命令行运行代码,工作目录是 bin。所以在这种情况下它会失败,因为没有 bin\word.txt

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

话虽如此,您需要确定文件是嵌入式资源(还是只是“资源”——有时我会互换使用的术语)。如果是这样,那么您将希望将文件构建到类路径中,并通过URL访问它。(在这种特殊情况下)您需要做的第一件事是确保文件构建到类路径中。使用项目根目录中的文件,您必须将构建配置为包含该文件。但是如果您将文件放在src或下面的某个目录中,那么默认构建应该将其放入类路径中。

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

例如,如果您将项目结构更改为< code > project root \ src \ resources \ word . txt ,您可以使用:

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

getResourceAsStream 返回一个 InputStream,但在后台获取一个 URL。或者,如果需要,您可以获取一个 URLgetResource() 将返回一个 URL

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

 类似资料:
  • 问题内容: 我有一个名为 的文件。 它与我的文件位于同一目录中。 但是,当我尝试通过以下代码访问它时,找不到此文件,发生错误: 这是我的代码: 问题答案: 直接将word.txt作为项目根文件夹的子级和src的对等方放置 免责声明:我想解释一下为什么这种方法适用于这种特殊情况,以及为什么它可能不适用于其他情况。 工作原理: 使用或任何其他变体时,你正在文件系统上相对于“工作目录”查找文件。工作目录

  • 问题内容: 我收到以下错误 但我可以肯定地说,我已经在src,bin和根目录下创建了一个in.txt文件。我还尝试在主要参数中指定完整目录,但仍然无法正常工作。为什么Eclipse不选择它? 问题答案: 我获取了您的代码,并使用以下命令行参数执行了该代码: 它完全没有问题。检查您的命令行。

  • 问题内容: 我正在制作一个打开并读取文件的程序。这是我的代码: 但是当我跑步时,出现以下错误: 我和位于同一目录中的以下位置: 我想知道我在做什么错? 问题答案: 我已经复制了您的代码,并且运行正常。 我怀疑您在hello.txt的实际文件名中仅存在一些问题,或者您在错误的目录中运行。考虑通过@ Eng.Fouad建议的方法进行验证

  • 我是编程新手。我最近尝试下载开源软件的源代码并设置环境。但是,当我第一次尝试运行构建时,我看到以下问题: 执行失败:Java . io . io异常:无法运行程序“unzip”(在目录中)....\"): CreateProcess error=2,系统找不到java.lang.ProcessBuilder.start中指定的文件 有什么解决这个问题的技巧吗? 据我所知,它无法成为文件: 在哪里查

  • 问题内容: 我正在用Java编写一个程序,该程序将执行winrar并将一个供我使用的jar文件解压缩到该文件夹​​中。我的Java代码是这样的 执行此操作时,出现此错误 谁能告诉我为什么会遇到这样的问题。为了使其起作用,我需要在代码中进行哪些更改? 问题答案: 假设位于中,则能够找到它,如果没有,则需要提供到它的完全限定路径,例如,假设已安装在其中,则需要使用类似… 就个人而言,我建议您使用它,因

  • keytool错误:Java . io . file not found exception:API . sepa . express . CRT(系统找不到指定的文件) 我尝试了在堆栈溢出中找到的各种示例。 和 已尝试以管理员身份使用cmd。我已将我的证书文件放在桌面上。当我试图复制时: C: \程序文件\Java\jdk1.8.0_60\jre\lib\security 它不接受证书文件。 完