为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

叮当猫咪 2019-11-05 12:04:44

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

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


查看完整描述

3 回答

?
紫衣仙女

将Wordd.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/resources的内容resources文件夹放在类路径的根目录下。因此,如果其中有一个文件,那么您将只使用getResourceAsStream("/thefile.txt")



查看完整回答
反对 回复 2019-11-06
?
LEATH

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

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

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



查看完整回答
反对 回复 2019-11-06
?
炎炎设计

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

如果您的项目的文件夹被命名为。AProject,它应该和你的在同一个地方src文件夹。

Aproject
        src
        word.txt


查看完整回答
反对 回复 2019-11-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信