Java 无法在文本文件中保存数据
我试图创建一个类,从GUI获取信息,并将其保存到一个文本文件中,我将其用作“数据库”,但出于某种原因,PrintWriter对象不会在该文件中写入新数据。这是我的密码Java 无法在文本文件中保存数据,java,printwriter,Java,Printwriter,我试图创建一个类,从GUI获取信息,并将其保存到一个文本文件中,我将其用作“数据库”,但出于某种原因,PrintWriter对象不会在该文件中写入新数据。这是我的密码 import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class IO {
File f = new File("DB.txt");
PrintWriter write;
Scanner input;
String[][] data;
String nameToSearch;
// search constructor
public IO(String name) {
super();
nameToSearch = name;
try {
input = new Scanner(f);
} catch (FileNotFoundException e) {
System.out.println("File not found please restart the program");
}
data = new String[linesCounter()][2];
for (int i = 0; i < linesCounter(); i++) {
data[i][0] = input.nextLine();
data[i][1] = input.nextLine();
}
}
public IO(String name, String number) {
try {
write = new PrintWriter(new FileWriter(f, true));
} catch (IOException e) {
System.out.println("Error");
}
write.println(name);
write.println(number);
}
int linesCounter() {
try {
input = new Scanner(f);
} catch (FileNotFoundException e) {
System.out.println("File not found please restart the program");
}
int counter = 0;
while (input.hasNext()) {
input.nextLine();
counter++;
}
return counter / 2;
}
int contactFinder() {
for (int i = 0; i < linesCounter(); i++)
if (data[i][0].equalsIgnoreCase(nameToSearch))
return i;
return -1;
}
String nameGetter() {
return data[contactFinder()][0];
}
String numGetter() {
return data[contactFinder()][1];
}
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.Scanner;
公共类IO{
文件f=新文件(“DB.txt”);
版画作家写作;
扫描仪输入;
字符串[][]数据;
字符串名称搜索;
//搜索构造函数
公共IO(字符串名称){
超级();
名称搜索=名称;
试一试{
输入=新扫描仪(f);
}catch(filenotfounde异常){
System.out.println(“未找到文件,请重新启动程序”);
}
数据=新字符串[LinesCenter()][2];
对于(int i=0;i
使用完成文件写入后,需要关闭printwriter
编辑:
对于NoTouchElement例外,在使用调用Scanner.nextline()之前,应该检查文件中是否有下一行
for(int i=0;i
使用完成文件写入后,需要关闭printwriter
编辑:
对于NoTouchElement例外,在使用调用Scanner.nextline()之前,应该检查文件中是否有下一行
for(int i=0;i
可能PrintWriter从未刷新过。您可以使用手动执行此操作
write.flush();
这将确保缓冲区写入文件。可能PrintWriter从未刷新过。您可以使用手动执行此操作
write.flush();
这将确保缓冲区写入文件。它可能是写入的文件,而不是您认为的位置。打印
文件.getAbsolutePath()
并查看它是否正确它可能是它正在写入的文件,而不是您认为它所在的位置。打印文件.getAbsolutePath()
并查看其是否正确否,是否为换行,并且在本例中是如此。No@CBredlow,close()将自动刷新。FindBugs()等工具会指出问题。实际上,在添加write.close()之后;数据已保存:)现在的问题是,当我在文件中搜索某个内容时,它会在线程“AWT-EventQueue-0”java.util.NoSuchElementException中抛出此异常:在IO的java.util.Scanner.nextLine(Scanner.java:1516)处找不到任何行。(IO.java:27)在GUI$Buttonlistener.actionPerformed(GUI.java:49)'还有很多,但我不能在这里写它不,如果它是换行的,在这个例子中就是这样。不@CBredlow,close()会自动刷新。像FindBugs()这样的工具会指出问题。实际上,在添加write.close()之后;数据已保存:)现在的问题是,当我在文件中搜索某个内容时,它会在线程“AWT-EventQueue-0”java.util.NoSuchElementException中抛出此异常:在IO的java.util.Scanner.nextLine(Scanner.java:1516)处找不到任何行。(IO.java:27)在GUI$Buttonlistener.actionPerformed(GUI.java:49)还有很多,但我不能写在这里错误是我忘了关闭printwriter:)无论如何谢谢:)我明白了,所以关闭也必须刷新。很高兴知道。错误是我忘记关闭printwriter:)无论如何谢谢:)我明白了,所以关闭也必须刷新。很高兴知道。
write.flush();