在项目根文件夹中找不到文件

时间:2014-09-23 13:08:22

标签: java eclipse file file-io java.util.scanner

我运行以下代码,程序返回FileNotFoundException:

public void read()
{
    Scanner scanner = new Scanner(new File("/project_folder_name/data.in"));
    while (scanner.hasNextLine())
    {
        System.out.println(scanner.nextLine());
    }
}

我尝试过项目根文件夹,包文件夹和任意文件夹(即/User/.../Desktop/data.in)中的 data.in 文件。我总是得到相同的结果:

示例:

//relative path (for when data.in is within project root folder)
Scanner scanner = new Scanner(new File("data.in"));

//path for when data.in is moved in package
Scanner scanner = new Scanner(
new File("/project_folder_name/source_folder_name/package_name/data.in"));

这些都不起作用。

我在Eclipse IDE中运行程序。

3 个答案:

答案 0 :(得分:0)

我不得不使用try / catch来避免异常中断程序:

public void read()
    {
        try
        {
            Scanner scanner = new Scanner
                    (new File("data.in"));
            while (scanner.hasNextLine()) 
            {
                System.out.println(scanner.nextLine());
            }
        }
        catch(IOException ex)
        {
            ex.printStackTrace();
        }
    }

在这种情况下,这也适用于:

"C:\\Users\\...\\Desktop\\data.in"
"/Users/.../Desktop/data.in"
"data.in"(if it's in the root folder)

答案 1 :(得分:0)

传递给new File()的路径是文件系统路径。您传递的路径("/project_folder_name/data.in")是Eclipse路径。等效的文件系统是${YOUR_WORKSPACE_LOCATION}/project_folder_name/data.in,其中``$ {YOUR_WORKSPACE_LOCATION}`是工作区位置的绝对文件系统路径。你如何将它纳入你的测试代码是一个很大的问题。如果您可以使用Eclipse启动程序,则可以在启动程序的配置中使用$ {resource_loc} Eclipse变量。

另一种选择是使用相对路径。当Eclips运行测试时,当前工作目录是项目的根目录。所以你可以只使用"data.in"。或者更好的是,使用"src/test/resources/data.in"(对于Mavenized项目)。

答案 2 :(得分:-1)

如果您使用的是Windows,则应该使用\而不是/。你也可以给出绝对路径ex。 C:\ folder \ folder \ data.in或者您可以将文件放在类路径中并执行文件(“data.in”)或相对于类路径文件(“\ folder \ data.in”)。别忘了逃避\ 2 \。

尝试将文件放在项目文件夹的根目录中,然后执行新的文件(“data.in”)。 将文件复制并粘贴到eclipse(项目文件夹)中的根文件夹

更改

 Scanner scanner = new Scanner(new File("/project_folder_name/data.in"));

 Scanner scanner = new Scanner(new File("data.in"));