如何在不修改实际文件的情况下阅读'文件'?

时间:2013-12-14 00:38:08

标签: java file file-io

我有以下代码:

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任务中使用它,它声明该文件将只使用一次但是我想让它更“动态”,可以这么说,因此能够保留文件的原始内容以备日后使用使用。

2 个答案:

答案 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");
    }