读取文件和处理数据
我是编程的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);
}
}
}
你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
希望你能固定程序通过给出的提示。
要比较字符串,你需要使用.equals()不是==。 – user2548635 2014-09-04 22:55:10
我认为您的任务是指导您将读取的数据放入列表或字典式结构中以执行报告 - 创建聚合(sum + avg)并对升序和降序(最小+最大)进行排序。 – Filburt 2014-09-04 23:08:40
@DavidPostill在上面。代码非常混乱。使用BufferReader读取这个文件,但使用扫描仪读取变量的操作? – 2014-09-04 23:11:41