Писатель в файл с консоли

  • 16
  • Недоступна
Итак, вам нужно записать кое-что в файл. Для этого первым делом вы читаете с консоли имя файла, затем считываете строки до тех пор, пока пользователь не введёт слово exit и, наконец, выводите абсолютно все введённые строки в файл, каждую строчку с новой строки.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (515)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Максим
Уровень 14, Москва
18 сентября, 21:10
public class Solution { public static File outFile() throws IOException { String fileName = ""; try(BufferedReader bufreader = new BufferedReader( new InputStreamReader(System.in, "cp866")); ) { fileName = bufreader.readLine(); } return new File(fileName); } public static List<String> consoleTextToList() throws IOException { List<String> list = new ArrayList<String>(); String inputString = ""; try (BufferedReader bufreader = new BufferedReader( new InputStreamReader(System.in, "cp866")); ) { do { inputString = bufreader.readLine(); list.add(inputString); } while (!inputString.equals("exit")); } return list; } public static void main(String[] args) throws IOException { File file = outFile(); try (BufferedWriter bufWriter = new BufferedWriter( new FileWriter(file, StandardCharsets.UTF_8)); ) { String result = ""; List<String> list = consoleTextToList(); for (String item : list) { if (!item.equals("exit")) { result = item + "\n"; } else { result = item; } bufWriter.write(result); } } } } ------- Выдает ошибку: Exception in thread "main" java.io.IOException: Stream closed. Если в outFile() не делать try-with-resources то все Ок. почему закрытие ресурса bufreader в метод outFile() влияет на ресурс inputString = bufreader.readLine(); в методе consoleTextToList()? Моя голова сломалась:)))
Stas Azin Младший помощник дворника в Улица
22 сентября, 20:53
А зачем так много try? Можно ведь и без них... Зачем использовать список? Записать можно сразу через цикл. Я вот так написал, более читабельно и без тысячи ненужных методов: Scanner scan = new Scanner(System.in); BufferedWriter bw = new BufferedWriter(new FileWriter(scan.nextLine())); int i = 0; while (true) { String str = scan.nextLine(); if (i++ == 0) bw.write(str); else bw.write("\n" + str); if (str.equals("exit")) { bw.close(); return; } }
Roman Eroshenko Доходяга в Помойка
15 сентября, 01:29
не забывайте про цикл do while, который идельно суда подходит
do {
               String line = s.nextLine();
               list.add(line);
           }while (!list.get(list.size()-1).equals("exit"));
Stas Azin Младший помощник дворника в Улица
22 сентября, 20:56
Цикл с постусловием это конечно весело, но что мешает добавить if в код?
Anonymous #3119894
Уровень 26, Москва, Russian Federation
10 сентября, 09:55
В условии exit должна быть записана в файл. В готовом решении while закрывается при вводе exit. Как exit записывается в файл?
Roman Eroshenko Доходяга в Помойка
15 сентября, 01:32
s это буфер который проверяеться после прошлого ввода
Александр Сергеев
Уровень 25, Подольск, Россия
16 сентября, 22:12
Все равно не понятно. Запись в эту переменную s из потока происходит внутри цикла после проверки. И если условие while не выполнится, то строка "exti" в s не попадет. И соответственно не запишется StringBuilder.
Андрей звукооператор в ДК при заводе
19 сентября, 19:58
всё норм, exit записывается ) попробуй скопировать код в IDE и запустить. Фишка в том, что в условии цикла проверяется предыдущая прочитанная строка. Хотя много народу , включая меня, сделало через do while , оно как-то логичнее.
Pavel V.
Уровень 28, Russian Federation
30 августа, 15:05
Записать абсолютно все введенные в п.2 строки в файл: каждую строчку — с новой строки.
writer.write(str + "\n");
6AP6AgOC Убираю в Подвале
30 августа, 06:48
Ошибка по 5 пункту - нужно не выбрать файл, а ввести его с консоли. 1) Прочесть с консоли имя файла.
В`ячеслав Чудновський
Уровень 20, Germany
28 августа, 17:19
В очередной раз не приняли правильный вариант ...
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main {

	public static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {

		try (FileOutputStream fos = new FileOutputStream(scanner.nextLine());
				OutputStreamWriter osw = new OutputStreamWriter(fos);
				BufferedWriter bw = new BufferedWriter(osw)) {

			while (true) {
				String temp = scanner.nextLine();
				bw.append(temp);
				if (temp.equals("exit"))
					break;
				bw.append('\n');
			}

		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			scanner.close();
		}

	}
}
hint1k
Уровень 32
22 августа, 08:41
Написал такой цикл while, а он не работает как положено. Почему-то игнорирует все нечетные строки введенные с консоли. Почему так? BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new FileWriter("1.txt")); String string; while (!br.readLine().equalsIgnoreCase("exit")) { string = br.readLine() + "\n"; bw.write(string); } br.close(); bw.close(); } }
Anonymous #3134346
Уровень 29
6 сентября, 21:33
Потому что в цикле while вы считываете: - одну строку в условии (которая используется только для сравнения с "exit" и в файл не попадает), - еще одну строку (новую) в теле цикла (которая записывается в файл, но которая не прошла проверку на сравнение с "exit". Отсюда и "игнорирование" строк через одну. Посмотрите правильное решение: в цикле while сравнение идет с переменной типа String, которая была получена с консоли в теле цикла.
7 августа, 14:21
Если кто-то хочет более подробно изучить темы и решить самостоятельно, то вот по порядку: 1) Про ридеры 2) Про BufferedReader и BufferedWriter Ну и еще повторите лекцию про интерфейсы (а точнее классы) InputStream и OutputStream
Mikhail Khanov
Уровень 16, Russian Federation
5 августа, 18:05
do...while идеально подходит для задачи :
String line;
do {
    line = reader.readLine();
    writer.write( line + "\n");
} while (!line.equals("exit"));
Михаил
Уровень 20, Харьков, Украина
11 июля, 20:32
while (true) {
                String s = reader.readLine();
                fileWrite.write(s + "\n");
                if (s.equals("exit")) break;

            }