我正在学习如何使用 Java 创建文本文件并存储它。但是,我收到错误“输入无效。请重试。”输入“^z”文件结束指示符时。 我的代码如下:
import java.io.FileNotFoundException;
import java.util.Formatter;
import java.lang.SecurityException;
import java.util.FormatterClosedException;
import java.util.NoSuchElementException;
import java.util.Scanner;
public class CreateTextFile {
public static void main(String[] args) {
// open clients.txt,output data to the file the close clients.txt
try (Formatter output = new Formatter("clients.txt")){
Scanner input = new Scanner(System.in);
System.out.printf("%s%n%s%n?",
"Enter account number, first name, last name and balance.",
"Enter end-of-file indicator to end input.");
while(input.hasNext()) {
//loop until end-of-file indicator
try {//output new record to file; assume valid input
output.format("%d %s %s %.2f%n", input.nextInt(),input.next(),input.next(),input.nextDouble());
}
catch(NoSuchElementException elementException) {
System.err.println("Invalid input. Please try again.");
input.nextLine();// discard input so user can try again
}
System.out.print("? ");
}
}
catch(SecurityException | FileNotFoundException | FormatterClosedException e) {
e.printStackTrace();
}
}
}
? 100 鲍勃·蓝 24.98 ? 200 史蒂夫·格林 -345.67 ? 300 帕姆·怀特 0.00 ? 400萨姆红-42.16 ? 500苏黄224.62 ? ^Z
这些是我的意见。
欢迎来到堆栈溢出。
一般来说,Ctrl-z 不是文件结束符。事实上,ASCII 字符集没有定义 EOF 字符。有一个 Ctrl-d 字符、EOT 或传输结束,这通常是最好的选择,因为大多数“终端”应用程序通过关闭任何外部连接并关闭和退出来响应它。
但是,根据输入关闭连接的决定完全取决于应用程序。
如果你用 ctrl-d 替换 ctrl-z,你的程序就可以正常工作,假设有一个类似 UNIX 的终端,例如重击。