FileReaders readLine返回总是空的JAVA

FileReaders readLine返回总是空的JAVA,java,file,filereader,Java,File,Filereader,在用java编写程序时,我试图读取一个文件的内容,该文件被视为存储器。我有一个函数可以修改商店中某个对象的数量,每个产品有一行,其中第一个单词是prodCode,第二个单词是它的数量。 这就是功能: public static void modifyAmount(String prodCode, String newAmount){ try{ File magazzino = new File("Magazzino.txt"); BufferedReade

在用java编写程序时,我试图读取一个文件的内容,该文件被视为存储器。我有一个函数可以修改商店中某个对象的数量,每个产品有一行,其中第一个单词是prodCode,第二个单词是它的数量。 这就是功能:

public static void modifyAmount(String prodCode, String newAmount){
    try{
        File magazzino = new File("Magazzino.txt");
        BufferedReader fromFile = new BufferedReader(new FileReader("Magazzino.txt"));
        FileWriter toFile = new FileWriter(magazzino);
        String oldContent="";
        String line;
        String lineToReplace = prodCode + " " + amountRequest(prodCode);
        String newLine = prodCode + " " + newAmount;

        while((line = fromFile.readLine()) != null){
            oldContent = oldContent + line + "\n";
            System.out.println("leggendo " + line);
        }
        System.out.println(oldContent);
        String newContent = oldContent.replaceAll(lineToReplace, newLine);
        toFile.write(newContent);

        toFile.close();
        fromFile.close();
    }catch(IOException e){
        e.printStackTrace();
    }
}
它的结果是,它不会进入while循环,因为第一个readLine结果为null,尽管文件格式正确,“amountRequest”函数工作正常,输入正确

Magazzino.txt:

1 12
3 25
4 12

您可能遇到了问题,因为您试图同时读取和写入文件,使用不同的文件句柄。我建议先读取文件,然后关闭FileReader,然后创建一个FileWriter对其进行写入。

打开一个文件两次,同时进行读取和写入。 只要你完成这一行

FileWriter toFile = new FileWriter(magazzino);
你的文件被删除了。自己检查一下。
实际上,通过这一行,您正在创建一个新的空文件来写入,而不是旧文件

我建议先读文件,然后关闭,再写

您还可以尝试为追加写入文件:
新文件编写器(“filename.txt”,true)
这不会擦除旧文件,允许您读取它。不过,新数据将被追加到末尾


如果要将文件用作状态或存储,我建议查看sqlite

问题是,在读取文件内容之前,您正在创建一个FileWriter实例,该实例将清除文件

public static void modifyAmount(String prodCode, String newAmount){
    try{
        File magazzino = new File("Magazzino.txt");
        BufferedReader fromFile = new BufferedReader(new FileReader("Magazzino.txt"));
        String oldContent="";
        String line;
        String lineToReplace = prodCode + " " + amountRequest(prodCode);
        String newLine = prodCode + " " + newAmount;

        while((line = fromFile.readLine()) != null){
            oldContent = oldContent + line + "\n";
            System.out.println("leggendo " + line);
        }
        fromFile.close();

        System.out.println(oldContent);
        String newContent = oldContent.replaceAll(lineToReplace, newLine);

        FileWriter toFile = new FileWriter(magazzino);
        toFile.write(newContent);

        toFile.close();
    }catch(IOException e){
        e.printStackTrace();
    }
}
FileWriter-toFile=newfilewriter(“Magazzino.txt”)将清除该文件

解决方案是在读取完文件后创建FileWriter实例

public static void modifyAmount(String prodCode, String newAmount){
    try{
        File magazzino = new File("Magazzino.txt");
        BufferedReader fromFile = new BufferedReader(new FileReader("Magazzino.txt"));
        String oldContent="";
        String line;
        String lineToReplace = prodCode + " " + amountRequest(prodCode);
        String newLine = prodCode + " " + newAmount;

        while((line = fromFile.readLine()) != null){
            oldContent = oldContent + line + "\n";
            System.out.println("leggendo " + line);
        }
        fromFile.close();

        System.out.println(oldContent);
        String newContent = oldContent.replaceAll(lineToReplace, newLine);

        FileWriter toFile = new FileWriter(magazzino);
        toFile.write(newContent);

        toFile.close();
    }catch(IOException e){
        e.printStackTrace();
    }
}