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

2021/01/17 00:51 · java ·  · 0评论

我有一个名为“ 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();          
    }
}

直接将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));

getResourceAsStream返回一个InputStream,但在后台获取一个URL。另外,URL如果需要,您可以得到一个getResource()将返回一个URL

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

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

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

}

此代码应在其查找位置打印文件夹。将文件放在此处,您将一路顺风。

您的文件应直接位于项目文件夹下,而不应位于其他任何子文件夹内。

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

Aproject
        src
        word.txt

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

确保在创建txt文件时不要键入名称“ name.txt”,而只是键入“ name”。如果键入“ name.txt”,则Eclipse将其视为“ name.txt.txt”。这为我解决了。还要将文件保存在src文件夹中,而不是.java所在的文件夹中,而是一个文件夹中。

我有同样的问题,但是你知道为什么吗?因为我没有将.txt放在文件的末尾,所以文件不是textFile,所以您应该做两件事:

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

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

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

我认为它总是沸腾classpath话虽如此,如果您从.class所在的文件夹运行,则应将其更改Scanner input = new Scanner(new File("word.txt"));Scanner input = new Scanner(new File("./word.txt"));

本文地址:http://java.askforanswer.com/java-io-filenotfoundexceptionxitongzhaobudaozhidingdewenjian.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!