public class Solution {
public static void main(String[] args) throws IOException {
if (args.length > 0) {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String fileName = bf.readLine();//вводим имя файла
switch (args[0]) {
case "-u":
changeData(args,fileName);
case "-d":
break;
}
}
}
public static void changeData(String[] args, String fileName) throws IOException {
String line;
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);// считываем имя файла
ArrayList<String> lines = new ArrayList<>(); создаем список для строк из исходящего файла
while (!((line=br.readLine())==null)){
if (getId(line).equals(args[1])){ // если id совпадает меняем данные и закидываем их в Список
String s= String.format("%-8s%-30s%-8s%-4s", args[1], args[2], args[3], args[4]);
lines.add(s);
}else{
lines.add(line);
}
}
br.close();
for(String line1: lines){
System.out.println(line1);
}// Выводим список в консоль. Все хорошо. Изменено.
BufferedWriter bw = null;// потоки для перезаписи
FileWriter fw = null;
for(String line1: lines){
fw = new FileWriter(fileName, true);
bw = new BufferedWriter(fw);
bw.write(line1);
}// после выполнения программы файл пустой. ПОЧЕМУ?
}
public static String getId(String line){
String idWithSpaces = line.substring(0, 8);
return idWithSpaces.trim();
}
}
Vasili666
23 уровень
Почему удаляет все содержимое файла и не перезаписывает его. Т.е. в файле есть данные, после окончания работы программы файл пустой
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Влад Java Developer в Tinkoff
26 августа 2020, 20:02
Потоки нужно закрывать
0
Vasili666
27 августа 2020, 17:07
Просветите темного))). Почему пока не закрыт выделенный поток(см. ниже), файл очищается, не перезаписывается(становится пустым)???
FileWriter fw = new FileWriter(fileName, false);
BufferedWriter bw = new BufferedWriter(fw);
for(String line1: lines){
bw.write(line1);
bw.newLine();
}
bw.close();
fw.close();
0
Влад Java Developer в Tinkoff
27 августа 2020, 22:16
При закрытии потока освобождаются все выделенные для него ресурсы, например, файл. В случае, если поток окажется не закрыт, может происходить утечка памяти.
0
Влад Java Developer в Tinkoff
27 августа 2020, 22:21
Посмотрите видео
0
Vasili666
31 августа 2020, 05:44
Спасибо большое!
0
НиколайExpert
26 августа 2020, 20:00
а если строки 50 и 51 вынести перед циклом?
0