读取文件和处理数据

问题描述:

我是编程的noobie,我似乎无法弄清楚该怎么做。读取文件和处理数据

我写了一个Java程序,在任何数量从一个文件中的行读取和生成报告:

值的数量的计数读 总和 的平均成绩(2小数位) 最大值连同相应的名字。 最小值以及相应的名称。

输入文件看起来是这样的:

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

要比较字符串,你需要使用.equals()不是==。 – user2548635 2014-09-04 22:55:10

+0

我认为您的任务是指导您将读取的数据放入列表或字典式结构中以执行报告 - 创建聚合(sum + avg)并对升序和降序(最小+最大)进行排序。 – Filburt 2014-09-04 23:08:40

+1

@DavidPostill在上面。代码非常混乱。使用BufferReader读取这个文件,但使用扫描仪读取变量的操作? – 2014-09-04 23:11:41

Scanner使用BufferReader的方式是完全错误的

注意:您可以在扫描仪构造函数中使用BufferReader

例如:

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

}catch(IOException e){ 
} 

注意:你的文件读出处理或其他进程必须在try块,因为在抓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 

希望你能固定程序通过给出的提示。