Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在文本文件中保存数据_Java_Printwriter - Fatal编程技术网

Java 无法在文本文件中保存数据

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

我试图创建一个类,从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;

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