0

我有一个从文件读取和写入的程序。我什至试图在其中创建文件,main但它仍然无法正常工作。

public static void main(String[] args) throws NumberFormatException, 
                                              IOException, 
                                              FileNotFoundException {
    System.out.println("Work in progress");

    File f = new File("Data.txt");
    System.out.println(f.getAbsolutePath());
            // Yes, it's there.


    UI ui = new UI();
    GenericDictionary<Integer> gd = new GenericDictionary<Integer>();
    Repository repo = new Repository("Data.txt", gd);
            // Should work, right ?

现在我的存储库:

public Repository (String fileName, GenericDictionary gd) 
                                               throws IOException, 
                                                      NumberFormatException, 
                                                      FileNotFoundException {
    this.fileName = fileName;
    this.gd = gd;


    FileReader input = null;
    BufferedReader  inputBuffer = null;

    try {
        input = new FileReader(this.fileName);
        inputBuffer = new BufferedReader (input);

        String line;
        while ((line = inputBuffer.readLine()) != null) {
            String[] inputData = line.split(",");

            Node<Integer> newNode = new Node<Integer> (
                                       Integer.parseInt(inputData[0]),
                                       Integer.parseInt(inputData[1]));
            this.gd.add(newNode);
        }



    }catch (NumberFormatException nfe){
        System.out.println(
               "Repository could not load data due to NumberFormatException: "
               + nfe); 
    }catch (FileNotFoundException fnfe) {
        System.out.println("File not found, error: " + fnfe);
    }finally {
        inputBuffer.close();
        input.close();
    }
}

现在,即使我创建了我的文件,它也不想使用它。最初它在我的存储库的构造函数中,我将它移到主文件中,仍然没有成功。

这是 Eclipse 在控制台中打印的内容:

  • Work in progress D:\Info\Java workspace\Laborator_4\Data.txt 找不到文件,错误:java.io.FileNotFoundException:Data.txt(系统找不到指定的文件)线程“main”java.lang中的异常。在 main.app.main(app.java:23) 的 repository.Repository.(Repository.java:49) 的 NullPointerException
4

4 回答 4

4

这不会像您认为的那样做:

File f = new File("Data.txt");
System.out.println(f.getAbsolutePath());
        // Yes, it's there.

这不会在磁盘上创建文件。它只是创建一个File表示路径名的对象。如果您使用:

System.out.println(f.exists());

会告诉你它是否真的存在。

所以除非D:\Info\Java workspace\Laborator_4\Data.txt真的,真的存在,否则你得到一个例外是完全合理的。创建文件并重试。

此外,你NullPointerException在你的finally块中得到 a 是因为你假设并且都是非空inputBufferinput:不要做那个假设。关闭前检查。

于 2012-12-16T19:23:52.257 回答
2

文件是一个抽象路径。执行这个:

File f = new File("Data.txt");

磁盘上没有绝对的东西。这也不是

System.out.println(f.getAbsolutePath());

对文件是否存在的任何测试。

做这个:

if(file.exists()) {
    // yes it's there
}
于 2012-12-16T19:24:02.440 回答
1

正如其他人所说,您不创建文件,请尝试touch()此处的方法:ApacheFileUtils

于 2012-12-16T19:25:54.237 回答
1

我希望这有效:

替换此行

Repository repo = new Repository("Data.txt", gd);

和 :

Repository repo = new Repository(f, gd);

在你的

public Repository (String fileName, GenericDictionary gd) 
                                           throws IOException, 
                                                  NumberFormatException, 
                                                  FileNotFoundException

用这个

public Repository (File f, GenericDictionary gd) 
                                           throws IOException, 
                                                  NumberFormatException, 
                                                  FileNotFoundException

并尝试 { } 而不是

input = new FileReader(this.fileName);

做这个

input = new FileReader(f.getAbsolutePath());
于 2012-12-16T19:27:51.417 回答