Страницы

Поиск по вопросам

воскресенье, 7 июля 2019 г.

Как записать данные в файл с консоли

Мне надо создать метод, который будет записывать все содержимое введенное пользователем с консоли в файл по заданному пути, не перезаписывая содержимое файла. И запись в файл должна производиться после ввода команды wr в отдельной строке. Метод я сделал, но в результате его работы, срабатывает сразу первый cath. Когда дебажу программу показывает - процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
public static void writeToFileFromConsole(String path){
InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader);
FileWriter writer = null; BufferedWriter bufferedWriter = null;
System.out.println("Enter file content to write in the file:");
try { String command = "wr"; String line; line = br.readLine(); if ((line = br.readLine()).equals(command)) { writer = new FileWriter(path, true); bufferedWriter = new BufferedWriter(writer);
bufferedWriter.append("
"); bufferedWriter.append(line); } }catch (IOException e){ System.err.println("Can't write to file with path " + path); } finally { try { reader.close(); br.close(); if (writer != null){ writer.close(); } if (bufferedWriter != null){ bufferedWriter.close(); } }catch (IOException e){ System.err.println("File with path " + path + " not found" ); } } }
Подскажите в чём моя ошибка ? И как исправить, чтобы в файл записывались данные введенные в консоли.


Ответ

Проверил ваш код, ошибок никаких не возникло, кроме исключения сообщавшего, что файла не существует.
Переделал, чтобы его не возникало:
private static void writeToFileFromConsole(String path) { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter file content to write in the file:");
try (OutputStream output = Files .newOutputStream( Paths.get(path), StandardOpenOption.APPEND, StandardOpenOption.CREATE); BufferedOutputStream outputStream = new BufferedOutputStream(output)) {
String line; while (!"rw".equalsIgnoreCase(line = reader.readLine())) { outputStream.write(System.lineSeparator().getBytes()); outputStream.write(line.getBytes()); } } catch (IOException e) { e.printStackTrace(); } }

Комментариев нет:

Отправить комментарий