我有一个从文件读取和写入的程序。 我甚至试图在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在控制台中打印的内容:
答案 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
,因为您假设 inputBuffer
且input
都是非-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());