import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class backup {
public static void main(String[] args) {
System.out.println("\nThe names in the file are:\n");
readFromFile();
}
public static void readFromFile() {
try {
Scanner file = new Scanner(new File("Names.txt"));
PrintWriter pass = new PrintWriter("pass.txt");
PrintWriter fail = new PrintWriter("fail.txt");
Scanner input = new Scanner(System.in);
while (file.hasNext()) {
String name = file.nextLine();
System.out.printf("Please enter " + name + "'s mark:");
int mark = input.nextInt();
Scanner kybd = new Scanner(System.in);
{
if (mark >= 40) {
// System.out.println(name + " has passed");
pass.println(name);
} else {
// System.out.println(name + " has failed");
fail.println(name);
}
}
} // end while
} // end try
catch (IOException ioe) {
System.out.println("Error handling file");
} // end catch
}// readFromFile
}
如果用户得分超过40,则他们无法写入文件通行证并且失败,如果用户进入通行证,则Names文件只是一个名称列表,但是我无法获得txt文件来填充输出。
当我在一段时间内插入我的打印机时,只有最后一个条目被添加到通过或失败txt文件中。
答案 0 :(得分:2)
PrintWriter
仅在关闭(close
)或刷新(flush
或可能认为是时间;-)时才真正写入。
尝试尽可能使用try-with-resources,这样就无需考虑关闭/刷新流或编写器。 try-with-resources注意在try
块的结尾处自动关闭AutoClosable
实现。
您的示例用try-with-resources重写(仅显示初始部分):
try(
Scanner file = new Scanner(new File("Names.txt"));
PrintWriter pass = new PrintWriter("pass.txt");
PrintWriter fail = new PrintWriter("fail.txt")
) {
其余的可以原样保留...或者,如果您愿意:您可能还想查找Files-API。也许您可以使用Files.lines
吗?
答案 1 :(得分:0)
您应该在文件上调用函数close
以便将其写入dsisk。
否则,您所做的修改仅在内存中
类似file.close()
答案 2 :(得分:0)
如果您使用PrintWriter
,则必须在末尾close
流。否则,它将仅在内存中。试试这个:
try {
Scanner file = new Scanner(new File("Names.txt"));
PrintWriter pass = new PrintWriter("pass.txt");
PrintWriter fail = new PrintWriter("fail.txt");
Scanner input = new Scanner(System.in);
while (file.hasNext()) {
String name = file.nextLine();
System.out.printf("Please enter " + name + "'s mark:");
int mark = input.nextInt();
//Scanner kybd = new Scanner(System.in);
//{
if (mark >= 40) {
// System.out.println(name + " has passed");
pass.println(name);
} else {
// System.out.println(name + " has failed");
fail.println(name);
}
//}
} // end while
pass.close();
fail.close();
} // end try
catch (IOException ioe) {
System.out.println("Error handling file");
}
答案 3 :(得分:0)
您需要确保在末尾添加一个finally块,并在可关闭的任何对象上调用close方法,因此在这种情况下,请在打印机上使用。在这种情况下 pass.close()和fail.close()。