Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedWriter打印不正确?_Java - Fatal编程技术网

Java BufferedWriter打印不正确?

Java BufferedWriter打印不正确?,java,Java,我正在制作一个程序,在指定数量的类中创建一个等级日志,并将这些数据写入一个文本文件。它写日期、班级名称、等级(或者至少应该写),以及结束语。由于某些原因,我搞不懂,我的程序只打印出日期和类名。有什么想法吗 代码如下: BufferedWriter data = null; //Writes Output try { File log = new File ("Grade.txt"); //Name of File FileWriter

我正在制作一个程序,在指定数量的类中创建一个等级日志,并将这些数据写入一个文本文件。它写日期、班级名称、等级(或者至少应该写),以及结束语。由于某些原因,我搞不懂,我的程序只打印出日期和类名。有什么想法吗

代码如下:

        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
BufferedWriter数据=null//写入输出
试一试{
文件日志=新文件(“Grade.txt”);//文件名
FileWriter FileWriter=newfilewriter(log,true);//追加文件
data=new BufferedWriter(fileWriter);//创建BufferedWriter
日期日期=新日期();//设置日期
//这里的代码生成一个类名数组
System.out.print(“输入分配名称:”);
title=reader.nextLine();
data.write(标题);
data.newLine();//空行
reader.nextLine();//使用输入
System.out.print(“输入可能的点:”);
temp=reader.nextInt();
如果(温度<0){
抛出新的算术异常(“”);
}否则{
poss+=温度;
数据写入(poss);
}//关闭如果
System.out.print(“输入获得的分数”);
temp=reader.nextInt();
如果(温度<0){
抛出新的算术异常(“”);
}否则{
挣+=临时工;
数据。写入(获取);
}//关闭如果
在程序结束之前,您不必
.close()
写入程序或文件。如果不关闭写入程序,则无法保证其内部缓冲区会刷新到文件和磁盘

如果您使用的是Java7,那么为了方便和正确,您可以使用try with resources:

try ( FileWriter fileWriter = new FileWriter (log, true); //Appends File
      BuferredWriter data = new BufferedWriter (fileWriter); //Creates BufferedWriter
    )
    {
    data.write("...");
    }

读取点后将读卡器移动到下一行。使用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
BufferedWriter data=null;//写入输出
试一试{
文件日志=新文件(“Grade.txt”);//文件名
FileWriter FileWriter=newfilewriter(log,true);//追加文件
data=new BufferedWriter(fileWriter);//创建BufferedWriter
日期日期=新日期();//设置日期
//这里的代码生成一个类名数组
System.out.print(“输入分配名称:”);
title=reader.nextLine();
data.write(标题);
data.newLine();//空行
reader.nextLine();//使用输入
System.out.print(“输入可能的点:”);
temp=reader.nextInt();
reader.nextLine();//添加了这个
如果(温度<0){
抛出新的算术异常(“”);
}否则{
poss+=温度;
数据写入(poss);
}//关闭如果
System.out.print(“输入获得的分数”);
temp=reader.nextInt();
reader.nextLine();//添加了这个
如果(温度<0){
抛出新的算术异常(“”);
}否则{
挣+=临时工;
数据。写入(获取);
}//关闭如果
方法
nextLine()
离开
\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
s或单独使用单词


此外,您应该始终
close()
您的
BufferedWriter
当您使用它以节省系统资源时。

不关闭它只会消耗系统资源,它不会导致写入文件的问题。也许,但Java并不保证对象的终结器会被调用。如果没有调用编写器的终结器,那么就不需要它我并不反对你不应该
close()
流,但这不是OP问题的原因。