如何存储加载的文本数据

时间:2014-11-12 18:46:05

标签: java text text-files

我有三个文本文件,必须按顺序加载它们,而不是加载当前加载的文件和以前加载的文本文件。

data1.txt
Name    Score
Leslie  25
Pat     12
Alfred  32

data2.txt
Name    Score
Leslie  35
Keith   22
Alfred  12

data3.txt
Name    Score
Philip  38
Keith   32
Diop    22

预期产出

Current Scores : 38, 32, 22
Current Names  : Philip, Keith, Diop

Previous Scores : 35, 22,12
Previous Names :  Leslie, Keith, Alfred

这是为此而编写的代码。它没有给我预期的结果:

List<String> name = new ArrayList<String>();
    List<String> currentscore = new ArrayList<String>();
    List<String> prevscore = new ArrayList<String>();

    String path = "C:........../question/";

    String textfile;

    File folder = new File(path);

    File [] listOfFiles = folder.listFiles(new FilenameFilter(){

        @Override
        public boolean accept(File folder, String name){
            return name.endsWith(".txt");               
        }
    });
    for (int ixa=0; ixa<listOfFiles.length; ixa++){

        textfile = listOfFiles[ixa].getName();
         String inputfile = textfile;
         FileReader fr1 = new FileReader(inputfile);
         BufferedReader bfr1 = new BufferedReader(fr1);
         String aLine1;
         while ((aLine1 = bfr1.readLine()) != null) {
                String[] split = aLine1.split("\t");
                name.add(split[0]); currentscore.add(split[1]);
            }
         System.out.println(name);System.out.println("Current Scores are" + currentscore);
         System.out.println("Previous Scores are" + prevscore);

         prevscore = currentscore;
         currentscore.clear();
        name.clear();
    }

1 个答案:

答案 0 :(得分:1)

编程问题

  • 您正在打开文件而不是关闭它们。您应该在bfr1.close()循环后使用while,或者最好使用&#34;尝试使用资源&#34;打开文件。
  • 您应该使用File对象本身而不是名称。
  • 您指定了prevscore = currentscore,但随后清除了currentscore。注意 - 当您指定一个对象时,您没有指定它的副本。您只是将对同一对象的引用放入prevscore。这意味着当您清除它时,它也会在prevscore中清除。你应该做的是:

    prevscore = currentscore;
    currentscore = new ArrayList<String>();
    

    这意味着prevscore现在指向曾经currentscore的内容,但现在currentscore指向一个新的空对象。

逻辑问题

  • 每个文件都有一个标题行。但是你从头开始阅读了这些内容,所以&#34; Name&#34;和&#34;分数&#34;字符串会附加到您的列表中。你应该跳过每个文件的第一行。
  • 您不打印姓名。你应该这样做。否则就没有必要保留一份名单。
  • 您正在保留以前的分数列表,但您没有保留以前的名称列表。如果您要打印它们,则需要一个以前名称的列表。