JC: Чтение с консоли и запись в файл

Напишите консольное приложение, которое просит Вас ввести произвольное количество слов и после нажатия на клавишу Enter записывает эти слова в текстовый файл. После записи, приложение, снова просить Вас ввести несколько слов и после нажатия на Enter добавляет их в конец этого же файла, но на новой строке и так до бесконечности.. Первые слова должны остаться. Если пользователь вводит “–stop”, то приложение должно завершаться.

Не забываете закрывать потоки и освобождать другие ресурсы, если Вы их задействовали. В моем решении файл создается автоматически, если файл уже существует, то он не перезаписывается, а все новые введенные строки записываются в конец файла. Желательно, чтобы это работало и для русских символов. 

Возможно Вам для решения этой задачи понадобятся следующие статьи:

Рекомендую использовать следующие классы.

Вот мой пример.

Файл после выполнения этой программы выглядит так.

Все.

Если Вы решили это задание, то посмотрите в сторону моего курса Трепещущий Падаван. Возможно он прекрасно Вам подойдет.

12 Комментарии “JC: Чтение с консоли и запись в файл

  1. Как нужно подправить код чтобы заработал вариант с BufferedReader?

  2. забыл поставить !-не while (!(reader.readLine().equals(“-stop”)) )
    проблема в том что печатает каждую 2 введенную строку

  3. Знаю что такие вопросы легко можно “нагуглить” но это я так для поддержания темы =)
    вообщем вот что у меня получилось:
    while (APPEND ) {
    String line = reader.readLine();
    if (line.endsWith("-stop")) {
    break;
    }
    writeNewLine(line);
    }

    1. 1) Это не то задание.
      2) Если бы в моем проекте ты написал нечто подобное, то я руки бы обломал и уволил.
      Недочеты :
      a. Нет лишней писанины и прочей шняги
      b. Некорректно освобождаешь ресурсы.
      с. Глубже не вчитывался.
      3) За то, что хоть как-то справился молодец. Но до junior разработчика походу еще далеко.
      4) Правильность логики приложения не проверял.

  4. вот рабочая программа без лишней писанины классов методов и прочей шняги

  5. Извините, но по моему мнению программа компакта, понятна и главное полностью выполняет условие, поставленное в задаче. Можно пожалуйста по подробнее: почему “хоть как то справился” ?

  6. мне кажется так проще
    package WorkWithFile;

    import java.io.FileNotFoundException;
    import java.util.Formatter;
    import java.util.Scanner;

    public class WriteToFile {
    private final static String STOP = “stop”;

    public static void main(String[] args) {

    Formatter formatter = null;
    try {
    formatter = new Formatter(“res//NaNWrite.txt”);
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    }
    Scanner scanner = new Scanner(System.in);
    System.out.println(“enter text !”);
    if (scanner.hasNext()) {
    try {
    String b = scanner.next();
    assert formatter != null;
    formatter.format(b);
    while (!(b.equals(STOP))) {
    b = scanner.nextLine();

    formatter.format(b + “\n”);
    }
    } finally {
    assert formatter != null;

    formatter.close();
    }
    }
    }
    }

  7. Вот мой код. Возможно проверите.

    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.util.Scanner;

    /**
    * @author BonDyka
    * @since 13.03.2016
    */
    public class Main {
    public static final String FILE_NAME = "output.txt";
    public static final String CHARSET = "UTF-8";
    public static final String WORD_FOR_EXIT = "--stop";
    public static final boolean WRITE_TO_END = true;

    public static void main(String[] args) {
    System.out.println("App was start. Enter '" + WORD_FOR_EXIT + "' to exit.");
    System.out.println("Enter new line...");
    try (Scanner scn = new Scanner(System.in)) {
    String msg;
    while (!isWasStopped(msg = scn.nextLine())) {
    writeToFile(msg);
    System.out.println("Enter new line...");
    }
    } catch (IOException e) {
    System.out.println(e.getMessage());
    System.exit(1);
    }
    }

    private static void writeToFile(String str) throws IOException {
    try (FileOutputStream fout = new FileOutputStream(FILE_NAME, WRITE_TO_END);
    OutputStreamWriter outSW = new OutputStreamWriter(fout, CHARSET);
    PrintWriter writer = new PrintWriter(outSW)) {
    writer.println(str);
    writer.flush();
    }
    }

    private static boolean isWasStopped(String str) {
    return str.equals(WORD_FOR_EXIT);
    }
    }

Добавить комментарий

Ваш e-mail не будет опубликован.

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">