Eclipse中的FileNotFoundException

时间:2014-07-23 06:48:01

标签: java eclipse

在Eclipse中,我的目录结构如下:

-src
 -com.xxx.yyy
  - MyClass.java
-assets
  - car.txt

MyClass.java看起来像这样:

public class MyClass {
    private static String FILE_PATH = "../assets/car.txt";
    public static void main(String[] args) {
        try {
                     //FileNotFoundException
            FileInputStream fis = new FileInputStream(new File(FILE_PATH)); 
        }
     ...
    }
}

我默认情况下,类路径为src/,因此我指向../assets/car.txt car.txt 文件。但我明白了:

java.io.FileNotFoundException: ../assets/car.txt (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)

为什么?

6 个答案:

答案 0 :(得分:3)

相对于执行的相对文件路径,假设程序在与srcassets目录相同的位置执行,则路径应为assets/car.txt

您可以使用System.out.println(new File(".").getCanonicalPath());

检查当前的执行位置

答案 1 :(得分:1)

据我所知,在运行程序时,它会被编译到src文件夹的父文件夹中。您最好将assets文件夹添加到构建路径,然后使用getClass().getResource[AsStream]()访问该文件。

要添加文件夹,请执行以下操作:

Right click on your project
Click Build Path
Choose Configure Build Path
Select Source
Click Add Folder...
Select your assets folder

在您的代码中,您可以使用MyClass.class.getResource[AsStream]()getClass().getResource[AsStream]()来调用它。

getResource()会返回URLgetResourceAsStream() InputStream。两种方法都期望路径作为参数。有关详细信息,请查看docs

答案 2 :(得分:0)

您的路径不正确

由于您在com.xxx.yyy内,因此您位于三个文件夹中。你需要摆脱所有这些。

所以你可以使用相对路径

FILE_PATH = "../../../assets/car.txt";

由于src是source folder,所有内容都直接来自classpasth,你也可以使用

FILE_PATH = "assets/car.txt";

答案 3 :(得分:0)

你在目录结构中处于第二级。

尝试

 FILE_PATH = "../../assets/car.txt";

答案 4 :(得分:0)

希望,这会对你有帮助......

package com.xxx.yyy;

import java.io.File;
import java.io.FileInputStream;
public class MyClass {
private static String FILE_PATH = "src/assets/car.txt";
public static void main(String[] args) {
    try {
                 //FileNotFoundException
        FileInputStream fis = new FileInputStream(new File(FILE_PATH)); 
    }
catch (Exception e){
    e.printStackTrace();
}
}
}

答案 5 :(得分:-1)

Ankit Lamba的建议有效:即使用String FILE_PATH = "assets/car.txt";