我有以下代码:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Printer {
private File f;
private Scanner in;
public Printer(){
try {
f = new File("C:\\Users\\Bob\\Desktop\\num.txt");
in = new Scanner(f);
}catch (IOException i){
System.out.println(i.getMessage());
}
}
public double average(){
int count = 0;
double total = 0;
while (in.hasNext()){
count++;
total += in.nextInt();
}
return total / count;
}
public void readFile(){
while (in.hasNext()){
System.out.println(in.next());
}
}
}
主要:
public class Main {
public static void main(String[] args) {
Printer mine = new Printer();
System.out.println(mine.average());
mine.readFile();
}
}
输出:
5.666666666666667
注意:我也期待每个单词的打印输出。
如何在不修改文件的情况下读取文件?我注意到如果我in.nextInt();
它会从文件中删除值。此外,当我调试并且我的编译器到达while (in.hasNext()){
时,它跳过了循环。如果有人会给我一个从文件中读取而不实际修改它的方法,我将不胜感激。我需要在我的一个hw任务中使用它,它声明该文件将只使用一次但是我想让它更“动态”,可以这么说,因此能够保留文件的原始内容以备日后使用使用。
答案 0 :(得分:4)
如何在不修改文件的情况下读取文件?我注意到如果我做in.nextInt();它从文件中删除了值。
您没有修改该文件。您正在更改扫描程序指向文件的位置。
while(in.hasNext()){它跳过循环。
这意味着线上没有更多的单词。 hasNext()检查相关行上是否有另一个单词。
阅读文件不会改变它,所以你正在做的事情已经是正确的想法。
读完文件后,它不知道您想再次启动该文件。你可以从头开始重新打开文件......
如果需要,您的HW似乎建议您将数据保存在List<Integer>
以便稍后打印。
答案 1 :(得分:0)
您可以通过以下方式阅读文件:
try {
BufferedReader br = new BufferedReader(new FileReader(pathToFile));
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
line = br.readLine();
}
}catch(Exception e){
System.out.println(e);
System.out.println("Error");
}