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

258
10 ноября 2017, 07:34

Мне надо создать метод, который будет записывать все содержимое введенное пользователем с консоли в файл по заданному пути, не перезаписывая содержимое файла. И запись в файл должна производиться после ввода команды 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("\n");
                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" );
            }
        }
    }

Подскажите в чём моя ошибка ? И как исправить, чтобы в файл записывались данные введенные в консоли.

Answer 1

Проверил ваш код, ошибок никаких не возникло, кроме исключения сообщавшего, что файла не существует.

Переделал, чтобы его не возникало:

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();
    }
}
READ ALSO
Почему объект String не передаётся по ссылке

Почему объект String не передаётся по ссылке

Доброго времени сутокВ консоль данный код выводит: "slipstream slip stream", а не "slipstream slipstream stream" как я предполагал

251
Как сделать поиск по нескольким полям таблицы

Как сделать поиск по нескольким полям таблицы

на данный момент поиск работает отдельно по каждому полю (для каждого поля создан свой сервлет, и страница jsp для вывода данных) с помощью...

229