读取文件并处理数据

时间:2014-09-04 22:50:31

标签: java

我是编程的小伙子,我似乎无法弄清楚要做什么。

我要编写一个Java程序,从文件中读取任意数量的行并生成一个报告:

读取的值的数量 总和 平均分(到小数点后两位) 最大值以及相应的名称。 最小值以及相应的名称。

输入文件如下所示:

55527    levaaj01   
57508    levaaj02   
58537    schrsd01   
59552    waterj01   
60552    boersm01   
61552    kercvj01   
62552    buttkp02   
64552    duncdj01   
65552    beingm01   

我的程序运行正常,但是当我加入时     得分= input.nextInt(); 和      player = input.next(); 程序停止工作,键盘输入似乎停止工作的文件名。 我试图分别用int和name读取每一行,以便我可以处理数据并完成我的任务。我真的不知道下一步该做什么。

这是我的代码:

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Scanner;

public class Program1 {

private Scanner input = new Scanner(System.in);
private static int fileRead = 0;
private String fileName = "";
private int count = 0;
private int score = 0;
private String player = "";

public static void main(String[] args) {

    Program1 p1 = new Program1();

    p1.getFirstDecision();

    p1.readIn();

}  

public void getFirstDecision() { //*************************************

    System.out.println("What is the name of the input file?");

    fileName = input.nextLine(); // gcgc_dat.txt

}



public void readIn(){           //*********************************************

    try {

        FileReader fr = new FileReader(fileName + ".txt");
        fileRead = 1;
        BufferedReader br = new BufferedReader(fr); 

        String str;

        int line = 0;

        while((str = br.readLine()) != null){

           score = input.nextInt();
           player = input.next();

           System.out.println(str);  

           line++;
           score = score + score;
           count++;

        }

       System.out.println(count);
       System.out.println(score);             

       br.close();

    }

    catch (Exception ex){

       System.out.println("There is no shop named: " + fileName);         

    }    

  } 

}

1 个答案:

答案 0 :(得分:1)

BufferReader使用Scanner的方式完全错误

注意:您可以在Scanner构造函数中使用BufferReader

例如:

try( Scanner input = new Scanner( new BufferedReader(new FileReader("your file path goes here")))){

 }catch(IOException e){
 }

注意:您的文件读取过程或其他进程必须在try块中,因为在catch block中,您无法执行任何操作,因为您的连接已关闭。它被称为try catch block with resources

注意

  

BufferedReader将创建一个缓冲区。这应该会更快   从文件中读取。为什么?因为缓冲区充满了   文件的内容。所以,你把更大的文件块放在RAM中   (如果您正在处理小文件,缓冲区可以包含整个文件   文件)。现在,如果扫描仪想要读取两个字节,它可以读取两个字节   来自缓冲区的字节,而不是要求两个字节   硬盘。

     

一般来说,读取10次4096字节要快得多   而不是4096次10个字节。

来源BufferedReader in Scanner's constructor

建议:您可以使用BufferReader阅读文件的每一行并自行解析,或者您可以使用Scanner类来提供您的能力解析令牌。

difference between Scanner and BufferReader

作为提示,您可以将此示例用于解析目标

代码:

        String input = "Kick 20";
        String[] inputSplited = input.split(" ");
        System.out.println("My splited name is " + inputSplited[0]);
        System.out.println("Next year I am " + (Integer.parseInt(inputSplited[1])+1));

输出:

My splited name is Kick
Next year I am 21

希望您可以通过给定的提示修复您的计划。