文件未找到没有意义的异常(对我来说)

时间:2012-12-16 19:20:09

标签: java filenotfoundexception

我有一个从文件读取和写入的程序。 我甚至试图在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在控制台中打印的内容:

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

4 个答案:

答案 0 :(得分: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,因为您假设 inputBufferinput都是非-null:不要做那个假设。关闭前检查。

答案 1 :(得分:2)

文件是一种抽象路径。执行此:

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

磁盘上绝对没有任何内容。这也不是

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

对文件存在的任何测试。

这样做:

if(file.exists()) {
    // yes it's there
}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我希望这有效:

替换此行

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

with:

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