Заменить одну строку текстового файла - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь прочитать первую строку текстового файла, а затем заменяю эту строку чем-то другим. Первая строка представляет собой значение типа int, поэтому сначала я изменил его на +1 от текущего.

BufferedWriter writer = new BufferedWriter( new FileWriter("file.txt", true)); 

BufferedReader reader = new BufferedReader( new FileReader("file.txt"));

String amount;

amount = reader.readLine();

int amount1 = Integer.parseInt(amount);
amount1 = amount1 + 1;
String amount2 = String.valueOf(amount1);
amount = amount.replace(amount, amount2);

writer.write(amount);

Вместо того, чтобы заменять исходное значение новым, оно просто записывает новое значение рядом с старый.

Ответы [ 3 ]

0 голосов
/ 23 января 2020

Если вы используете последнюю версию Java, вы можете сделать это:

try (BufferedReader reader = new BufferedReader( new FileReader("file.txt"));
        Writer writer = new FileWriter("newfile.txt")) {
    String firstLine = reader.readLine();
    firstLine = Integer.toString(Integer.parseInt(firstLine) + 1);
    writer.writeLine(firstLine);
    reader.transferTo(writer);
}

и затем заменить file.txt на newfile.txt

0 голосов
/ 23 января 2020

Вы должны заменить весь файл при изменении текстового файла.

Path path = Paths.get("file.txt");
Charset charset = Charset.defaultCharset();
List<String> lines = Files.readAllLines(path, charset);
String firstLine = lines.get(0);
...
lines.set(0, firstLines);
Files.write(path, lines, charset);

Однако, если вы позаботитесь о том, чтобы первая строка никогда не менялась по длине и имела достаточно места, вы можете использовать RandomAccessFile и измените только этот фрагмент текста.

0 голосов
/ 23 января 2020

Ну, вы сказали автору добавить вместо замены через второй аргумент конструктора FileWriter:

BufferedWriter writer = new BufferedWriter( new FileWriter("file.txt", true)); 

Если вы хотите заменить файл, вы должны установить append в false:

BufferedWriter writer = new BufferedWriter( new FileWriter("file.txt", false)); 

Однако это заменяет весь файл , а не только первую строку.

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