Сначала код, потом объяснение ...
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Lesson {
public static void main(String[] args) {
File file = new File("mytext.txt");
try (Scanner input = new Scanner(System.in);
PrintWriter pw = new PrintWriter(file)) {
System.out.println("Enter a text here: ");
String str = input.nextLine();
while (str.length() > 0) {
pw.println(str);
pw.flush();
str = input.nextLine();
}
}
catch (IOException xIo) {
xIo.printStackTrace();
}
System.out.println("Done");
}
}
Для приведенного выше кода требуется как минимум Java 7, поскольку он использует try-with-resources . Scanner
должен быть закрыт, точно так же, как PrintWriter
должен быть закрыт. try-with-resources гарантирует, что они закрыты. Обратите внимание, что если файл mytext.txt не существует, создание нового PrintWriter
также создаст файл, а если файл уже существует, его содержимое будет удалено и заменено введенным вами текстом.
После этого появится приглашение, т. Е. Введите здесь текст , и пользователь введет строку текста. Метод nextLine()
будет получать весь введенный текст, пока пользователь не нажмет Enter. Я прочитал ваш вопрос еще раз, и программа должна выйти, когда пользователь нажимает Enter без ввода текста . Когда пользователь делает это, str
является пустой строкой, то есть имеет нулевую длину. Это означает, что мне нужно присвоить значение str
перед циклом while
, следовательно, первый вызов метода nextLine()
перед циклом while
.
Внутри цикла while
я записываю введенное пользователем значение в файл mytext.txt и затем жду, пока пользователь введет еще одну строку текста. Если пользователь нажимает Enter без ввода текста, str
будет иметь нулевую длину и цикл while
завершится.
Написано и протестировано с использованием JDK 12 для Windows 10 с использованием Eclipse для разработчиков Java, версия 2019-03.