File 写入文件JavaFx时出现问题
所以,我对编程和这个网站还是新手。 我一直在尝试制作自己的浏览器,只是为了好玩,我正在学习如何从文本文件中写入和读取,作为日志来保存数据。我正在尝试制作一个收藏夹系统,这样我可以将不同的网站保存到日志中,但我不明白为什么我的部分代码不起作用。我在网上花了大约两个半小时四处看看,没有发现任何问题File 写入文件JavaFx时出现问题,file,javafx,input,output,File,Javafx,Input,Output,所以,我对编程和这个网站还是新手。 我一直在尝试制作自己的浏览器,只是为了好玩,我正在学习如何从文本文件中写入和读取,作为日志来保存数据。我正在尝试制作一个收藏夹系统,这样我可以将不同的网站保存到日志中,但我不明白为什么我的部分代码不起作用。我在网上花了大约两个半小时四处看看,没有发现任何问题 try(BufferedReader format1 = new BufferedReader(new FileRead
try(BufferedReader format1 = new BufferedReader(new
FileReader("favorites.txt"))) {
String line = format1.readLine(); //Used to look through file
String found = ""; //Stores the address that was the same
//Loop searches file, I only plan to have a max of 20 favorites
for (int counter = 0; counter < 20; counter++) {
System.out.println(line); //Just used so I can make sure the
loop works
if(line.equals(input)) {
counter = 20;
found = line;
}
line = format1.readLine();
}
format1.close();
if(!(found.equals(input))) {
BufferedWriter format2 = new BufferedWriter(new
FileWriter("favorites.txt", true));
format2.write(input);
format2.newLine();
format2.close();
}
} catch (IOException e1) {
System.out.println("ERROR! Favorite not Added.");
}
try(BufferedReader format1=new BufferedReader(new
文件阅读器(“favorites.txt”)){
String line=format1.readLine();//用于查看文件
String found=“;//存储相同的地址
//循环搜索文件,我只计划最多有20个收藏夹
用于(int计数器=0;计数器<20;计数器++){
System.out.println(line);//只是为了确保
循环工程
if(行等于(输入)){
计数器=20;
发现=线;
}
line=format1.readLine();
}
format1.close();
如果(!(找到.等于(输入))){
BufferedWriter format2=新的BufferedWriter(新的
FileWriter(“favorites.txt”,true));
格式2.写入(输入);
format2.newLine();
format2.close();
}
}捕获(IOE1异常){
System.out.println(“错误!未添加收藏夹”);
}
我已经检查了问题所在,实际写入文件的if语句似乎就是问题所在。我看了一百万遍,什么也看不见。也许一个更有经验的程序员可以看到我的问题?每当我运行这段代码时,它都会发出大量错误消息。谢谢你的帮助 我怀疑您的问题源于这个奇怪的“max 20 Favorites”循环,它将尝试读取20行,无论文件是否包含它们(最终结果是它抛出小于20行的
NullPointerException
,忽略任何超过20行的内容)。看起来你试图通过只读一定数量的行来简化事情,这样你就不必计算出要读多少行,但在这样做的过程中,实际上让事情变得更复杂了
在Java中,一行一行地读取整个文件有一个相当常见的习惯用法-尝试将for循环(使用计数器
作为迭代器的循环)替换为以下内容:
String line;
while((line=format1.readLine())!=null) {
System.out.println(line); //Just used so I can make sure the
if (line.equals(input)) {
found = line;
break;
}
}
format1.close();
这将把文件的每一行读入
line
,而readLine()
返回的值不是null
,当它到达文件末尾时,返回的值就不是null了。“它会吐出大量错误消息”。错误消息说了什么?你应该读给我听。如果在阅读了那篇文章并检查了堆栈跟踪之后,您仍然无法找出问题所在,请在问题中发布完整的堆栈跟踪,并显示代码中的哪一行引发异常。@James_D我尝试过,但由于我相对较新,我不太确定它们的意思。这与应用程序中的异常有很大关系。奇怪的是,当我注释掉for循环时,它工作得很好。不确定发生了什么。这就是为什么我链接了解释如何读取堆栈跟踪的帖子。这就解决了它!非常感谢。你说得对,我试图简化它。我现在明白了,那是一个糟糕的举动。我知道下次该做什么了。