【问题标题】:BufferReader to write new file with previous infoBufferReader 用以前的信息写入新文件
【发布时间】:2014-01-05 18:22:34
【问题描述】:

这是我的代码的基础。它在控制台上打印学生成绩,但我如何使用 Buffereader 将所有学生成绩放在一个新文件中。

import java.io.*;
import java.util.InputMismatchException;
import java.lang.*;
import java.util.*;

public class WorkSpace {

private Scanner x;

    public void openFile(){
        try{
            x = new Scanner (new File ("grades.txt"));
        }
        catch(Exception e){
            System.out.println("could not find file");
        }}



    public void createFile()throws IOException {


        try{
            File file = new File("grades.txt");
            Scanner s = new Scanner(file);




        while(s.hasNext()){
        {
            String [] split = s.nextLine().split(", ");

            String fname = split[0];

            Double q1 = Double.parseDouble (split[1]);
            Double q2 = Double.parseDouble (split[2]);
            Double q3 = Double.parseDouble (split[3]);
            Double q4 = Double.parseDouble (split[4]);
            Double proji = Double.parseDouble (split[5]);
            Double projii = Double.parseDouble (split[6]);
            Double projiii = Double.parseDouble (split[7]);

            double studentgrade = (q1 *0.1) + (q2 *0.1) +(q3 *0.1) + (q4 *0.1) +(proji*0.15) + (projii * 0.2) + (projiii *0.25);
            if(studentgrade>90)
                System.out.printf("%s got an A\n", fname);
            else if(studentgrade>80)
                System.out.printf("%s got a B\n", fname);
            else if(studentgrade>70)
                System.out.printf("%s got a C\n", fname);
            else if(studentgrade>60)
                System.out.printf("%s got a D\n", fname);
            else if(studentgrade>50)
                System.out.printf("%s got a F\n", fname);


        }}}catch(Exception e){
            e.printStackTrace();
        }



    }
    public void closeFile(){
        x.close();
    }

【问题讨论】:

  • 你遇到了什么错误?
  • 线程“main”中的异常 java.util.InputMismatchException 在 java.util.Scanner.throwFor(Scanner.java:909) 在 java.util.Scanner.next(Scanner.java:1530) 在java.util.Scanner.nextInt(Scanner.java:2160) 在 java.util.Scanner.nextInt(Scanner.java:2119) 在 ReadFile.readFile(ReadFile.java:22) 在 Project3.main(Project3.java:15 )
  • 从上面,类 Project3 没有调用 readFile()。你从哪里得到那个错误?为您的项目提供适当的堆栈跟踪。

标签: java file-io bufferedreader


【解决方案1】:

Scanner.nextInt() 返回从源读取的下一个整数值(不是源长度或其他东西)。您打开文件并尝试从开头读取整数,但文件不是以整数开头,因此您会遇到异常。

【讨论】:

  • 如何在仍然能够解析所有字符串/双精度的情况下解决这个问题?
  • 首先,去掉 int numTimes = file.nextInt()。然后像 11yearoldjavaguy 的示例中那样将 for 循环更改为 while 循环。更改他的 String next = s.next(); to String [] split = file.nextLine().split(" ");并像以前一样在 split 上操作。
  • 一旦我这样做了,我该如何继续使用我的 for 循环?
  • 这是什么错误?你能打印堆栈跟踪吗?你的 Grades.txt 文件是什么样的?
  • java.lang.NumberFormatException:对于输入字符串:“100”,在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241) 在 java.lang.Double.parseDouble(Double.java: 540) 在 ReadFile.readFile(ReadFile.java:35) 在 Project3.main(Project3.java:15)
【解决方案2】:

您阅读文件的方式不正确。使用扫描仪读取文件的最常见方法:



try{
File file = new File("Your/File/Path");
Scanner s = new Scanner(file);
s.useDelimiter("\n");//splits the whole file's text by "\n"
while(s.hasNext()){
String next = s.next();
//parse your stuff
}
s.close();
}catch(Exception e){}

此外,scanner.nextInt() 不会返回文件的长度。这就是问题所在。使用file.length 获取文件的长度。

【讨论】:

  • 看起来你把它改成了while循环!请点赞?
【解决方案3】:

你的问题没有意义。 BufferedReader 不写文件。它,错误,读取文件。你想要的是,呃,BufferedWriter.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多