Продебажил сто раз, но так и не понял, почему эта часть кода не пишет в файл (тестировал на .txt) все проходит по массиву, меняет на нужную строку, но файл остается таким , как и был с теми же строками не смотря на то, что в массиве меняет строку и при дебаге показывает, что пишет, но нет, открываю файл, как были куртки сноубордистов, так и есть...!!!((( А должны быть стринги женские эро...ие... е мое...!!!
public class Solution {
public static void main(String[] args) throws IOException {
ArrayList<String> list = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String fileName = bufferedReader.readLine();
bufferedReader.close();
// C:\Users\skak8\OneDrive\Рабочий стол\Price-LAPTOP-L86C1L0C-LAPTOP-L86C1L0C.txt
if (args.length == 0) {return;}
if (args[0].equals("-u")) {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
while (reader.ready()) {
list.add(reader.readLine());
}
for (int i = 0; i < list.size(); i++) {
int id = Integer.parseInt(list.get(i).substring(0, 8).trim());
if (id == (Integer.parseInt(args[1]))) {
list.set(i, String.format("%-8d%-30.30s%-8.2f%-4d", Integer.parseInt(args[1]), args[2], Double.parseDouble(args[3]), Integer.parseInt(args[4])));
}
}
BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true));
for (String s : list) {
writer.write(s + "\n");
}
System.out.println(list);
}
}
}
Михаил Скакунов
30 уровень
Помогите разобраться!!!!
Обсуждается
Комментарии (10)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Max Zap
5 октября 2021, 07:03
Что бы не забывать закрывать удобно использовать try with resources. habr
0
Михаил Скакунов
5 октября 2021, 07:34
Да, спасибо я знаю...
0
Ksenia VolkovaJava Developer в DXCMaster
4 октября 2021, 23:13
BufferedWriter кто закрывать будет?
И для чего тебе true в конструкторе FileWriter?
0
Михаил Скакунов
5 октября 2021, 07:34
Когда убрал true почему-то файл вообще перетерло, но ничего не записал...
0
Ksenia VolkovaJava Developer в DXCMaster
5 октября 2021, 07:42
А поток ты закрыл?
0
Михаил Скакунов
5 октября 2021, 07:48
Да, закрыл... не понимаю... где собака порылась... прохожусь дебагом все видит, все меняет, вывожу в печать после изменения лист там все поменял... дебаг, показывает, что все записывается, блин открываю файл все также, причем убираю true, просто перетирает и ничего не пишет...
0
Михаил Скакунов
5 октября 2021, 07:56
Теперь закрыл сразу после того, как ридер прочитал все ... все получилось.. спасибо...!!! Но объясните момент с закрытием... получается, что даже если ридер уже прочитал и не вызывается явно, то он все равно читает или как я этот момент не понял...
0
Ksenia VolkovaJava Developer в DXCMaster
5 октября 2021, 08:52
Тут важно закрывать не reader, а writer.
И лучше всегда показывай код, о котором говоришь.
0
Михаил Скакунов
5 октября 2021, 09:26
Спасибо! Я играл с открытием и закрытием понял, что если writer открыть сразу после reader, тоже не получится, зато получится если через try with, поскольку видимо последовательно закрывает потоки...
0
Ksenia VolkovaJava Developer в DXCMaster
5 октября 2021, 09:29
Открытие потока на запись (без append true) стирает все содержимое файла. Поэтому если ты откроешь поток до того, как прочитал строки из файла, то и читать уже будет нечего.
0