FileReaders readLine возвращает всегда ноль JAVA - PullRequest
0 голосов
/ 01 мая 2018

Написание программы на 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

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Вы открываете файл дважды, одновременно для чтения и записи. Как только вы сделаете эту строку,

FileWriter toFile = new FileWriter(magazzino);

Ваш файл удален. Проверьте это сами.
На самом деле, с помощью этой строки вы создаете новый пустой файл для записи вместо старого.

Я бы предложил прочитать файл, затем закрыть, а затем написать.

Вы также можете попробовать переписать файл для append : new FileWriter("filename.txt", true); Это не удалит старый файл, что позволит вам прочитать его. Но новые данные будут добавлены до конца.

Если вы хотите использовать свой файл в качестве состояния или хранилища, я бы посоветовал взглянуть на sqlite : https://www.sqlite.org/index.html

0 голосов
/ 01 мая 2018

Проблема в том, что перед тем, как вы прочтете содержимое файла, вы создадите экземпляр FileWriter, который очистит файл.

FileWriter toFile = new FileWriter("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();
    }
}
0 голосов
/ 01 мая 2018

Возможно, у вас возникли проблемы, потому что вы пытаетесь одновременно читать и записывать файл с разными дескрипторами файла. Я бы предложил сначала прочитать файл, затем закрыть FileReader, а затем создать FileWriter для записи в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...