我是编程的小伙子,我似乎无法弄清楚要做什么。
我要编写一个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);
}
}
}
答案 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
希望您可以通过给定的提示修复您的计划。