我正在创建一个程序,在指定数量的类中创建成绩日志,并将此数据写入文本文件。它写日期,类名,等级(或至少它应该)和结束语。由于某些原因我无法弄清楚,我的程序只打印出日期和类名。有什么想法吗?
以下是代码:
BufferedWriter data = null; //Writes Output
try {
File log = new File ("Grade.txt"); //Name of File
FileWriter fileWriter = new FileWriter (log, true); //Appends File
data = new BufferedWriter (fileWriter); //Creates BufferedWriter
Date date = new Date (); //Sets Date
//Code here makes an array of class names
System.out.print ("Enter Assignment Name: ");
title = reader.nextLine ();
data.write (title);
data.newLine (); //Blank Line
reader.nextLine (); //Consume Input
System.out.print ("Enter Points Possible: ");
temp = reader.nextInt();
if (temp < 0){
throw new ArithmeticException ("");
}else{
poss += temp;
data.write(poss);
}//Close If
System.out.print ("Enter Points Earned");
temp = reader.nextInt();
if (temp < 0){
throw new ArithmeticException ("");
}else{
earn += temp;
data.write(earn);
}//Close If
答案 0 :(得分:0)
在程序结束之前,您没有.close()
作者或文件。如果不关闭编写器,则无法保证将其内部缓冲区刷新到文件和磁盘。
如果您使用的是Java7,那么您可以使用try-with-resources方便和正确:
try ( FileWriter fileWriter = new FileWriter (log, true); //Appends File
BuferredWriter data = new BufferedWriter (fileWriter); //Creates BufferedWriter
)
{
data.write("...");
}
答案 1 :(得分:0)
读取点后,将阅读器移动到下一行。使用reader.nextInt时,输入只读取数字,而不是按Enter键时创建的新行字符。在reader.nextInt读取新行字符并清除缓冲区后调用reader.nextLine。
BufferedWriter data = null; //Writes Output
try {
File log = new File ("Grade.txt"); //Name of File
FileWriter fileWriter = new FileWriter (log, true); //Appends File
data = new BufferedWriter (fileWriter); //Creates BufferedWriter
Date date = new Date (); //Sets Date
//Code here makes an array of class names
System.out.print ("Enter Assignment Name: ");
title = reader.nextLine ();
data.write (title);
data.newLine (); //Blank Line
reader.nextLine (); //Consume Input
System.out.print ("Enter Points Possible: ");
temp = reader.nextInt();
reader.nextLine(); //added this
if (temp < 0){
throw new ArithmeticException ("");
}else{
poss += temp;
data.write(poss);
}//Close If
System.out.print ("Enter Points Earned");
temp = reader.nextInt();
reader.nextLine(); //added this
if (temp < 0){
throw new ArithmeticException ("");
}else{
earn += temp;
data.write(earn);
}//Close If
答案 2 :(得分:0)
nextInt()
方法离开\n
(结束行)符号,并由nextLine()
立即拾取,跳过下一个输入。你想要做的是使用nextLine()
作为一切,并在以后解析它:
String nextIntString = keyboard.nextLine(); //get the number as a single line
int nextInt = Integer.parseInt(nextIntString); //convert the string to an int
这是迄今为止避免问题的最简单方法 - 不要混淆“下一步”方法。仅使用nextLine()
然后解析int
或之后单独的单词。
此外,完成后,您应始终close()
BufferedWriter
以节省系统资源。