24

我正在制作一个打开和读取文件的程序。这是我的代码:

import java.io.*;

public class FileRead{
    public static void main(String[] args){
        try{
            File file = new File("hello.txt");
            System.out.println(file.getCanonicalPath());
            FileInputStream ft = new FileInputStream(file);

            DataInputStream in = new DataInputStream(ft);
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String strline;

            while((strline = br.readLine()) != null){
                System.out.println(strline);
            }
            in.close();
        }catch(Exception e){
            System.err.println("Error: " + e.getMessage());
        }
    }
}

但是当我运行时,我得到了这个错误:

C:\Users\User\Documents\Workspace\FileRead\hello.txt
Error: hello.txt (The system cannot find the file specified)

myFileRead.javahello.txtwhere 在同一目录中,可以在以下位置找到:

C:\Users\User\Documents\Workspace\FileRead

我想知道我做错了什么?

4

8 回答 8

61

尝试通过调用列出目录中所有文件的名称:

File file = new File(".");
for(String fileNames : file.list()) System.out.println(fileNames);

看看你是否会在列表中找到你的文件。

于 2012-07-19T02:23:44.397 回答
11

我已经复制了你的代码,它运行良好。

我怀疑您只是在 hello.txt 的实际文件名中遇到了一些问题,或者您在错误的目录中运行。考虑通过@Eng.Fouad 建议的方法进行验证

于 2012-07-19T02:30:24.210 回答
7

您需要提供文件所在位置的绝对路径名。

        File file = new File("C:\\Users\\User\\Documents\\Workspace\\FileRead\\hello.txt");
于 2012-07-19T02:27:26.080 回答
3

在您的 IDE 中,右键单击要读取的文件并选择“复制路径”,然后将其粘贴到您的代码中。

请注意,Windows 隐藏了文件扩展名,因此如果您创建一个文本文件“myfile.txt”,它实际上可能会保存为“myfile.txt.txt”

于 2014-01-31T10:44:23.023 回答
3

通常,在 File 构造函数中仅说明文件名意味着该文件与 java 文件位于同一目录中。但是,当使用诸如 NetBeans 和 Eclipse 之类的 IDE 时,您必须将文件保存在项目文件夹目录中。所以我认为检查这将解决你的问题。

于 2014-07-01T16:50:57.930 回答
1

你是如何运行程序的?

运行的不是 java 文件,而是通过编译 java 代码创建的 .class 文件。您要么需要像 user1420750 所说的那样指定绝对路径,要么需要指定System.getProperty("user.dir")目录的相对路径。这应该是工作目录或运行 java 命令的目录。

于 2012-07-19T03:05:16.623 回答
1

首先创建与您指定的路径相同的文件夹。然后创建文件

File dir = new File("C:\\USER\\Semple_file\\");
File file = new File("C:\\USER\\Semple_file\\abc.txt");

if(!file.exists())
{
    dir.mkdir();
    file.createNewFile();
    System.out.println("File,Folder Created.);
}
于 2017-12-20T06:37:28.583 回答
0

当你运行一个 jar 时,你的 Main 类本身变成了 args[0] 并且你的文件名紧随其后。

我有同样的问题:当提供来自 eclipse 的绝对路径时,我可以找到我的文件(因为我将文件称为 args[0])。然而,当我从 jar 中运行相同的内容时,它试图找到我的主类 - 这就是我想到应该从 args[1] 读取文件的想法。

于 2014-07-01T16:45:45.870 回答