BufferedWriter打印不正确?

时间:2013-03-22 00:46:52

标签: java

我正在创建一个程序,在指定数量的类中创建成绩日志,并将此数据写入文本文件。它写日期,类名,等级(或至少它应该)和结束语。由于某些原因我无法弄清楚,我的程序只打印出日期和类名。有什么想法吗?

以下是代码:

        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

3 个答案:

答案 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以节省系统资源。