如何对文本文件进行排序并使用java保存?

时间:2014-12-08 23:15:53

标签: java arrays sorting

我被要求做一个测验,在测验结束时,我想保留的是两个独立的数组名称[]和得分[]。我被要求使用输入和输出将分数保存在文件中。我已设法完成所有操作并成功输出结果并将其保存到文件中(例如highscores.txt)

结果保存如下:

4
name10
name5
name4
name2

第一行表示文件中有多少分数,因为每个参加测验的人都会保存他们的分数。 我正在努力做的是将得分按从最高到最低的顺序排序。

我已经尝试在将分数保存到文件中之前对分数进行排序,但文件中的旧分数将不再排序。例如:

8 
newname10
newname9 
newname8
newname7
name10
name5
name4
name2

我只是一个初学者所以很容易......

4 个答案:

答案 0 :(得分:0)

你应该做的是创建实现class Person的{​​{1}},如果你有点懒,而且数据量也不大Comparable<Person>

然后将所有内容放在Serializable中并编写序列化TreeSet的方法并对其进行反序列化。

像这样:

TreeSet<Person>

答案 1 :(得分:0)

好吧,因为您没有使用任何格式来轻松区分用户名和分数(例如:[用户名]:[分数])您将这两个信息彼此分开的问题之后。

无论如何 - 您需要加载数据并重新排序,尝试将用户名与分数分开。读取我的行的文件行,并使用regexp从分数中分割名称(希望用户名仅包含字母):Pattern.compile("(\w+)(\d+)")。然后,您可以使用Matcher获取组1(名称)和组2(分数)。然后你可以比较得分并重新排序列表

答案 2 :(得分:0)

这个小程序应该完成工作。

请记住,这只是对文本文件进行排序。如果您需要根据您的问题进行进一步处理,请进行修改。

public class LineReader {
    public static void main(String[] args) {
        String file = args[0];
        List<String> _list = new ArrayList<String>();
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            for (String line; (line = br.readLine()) != null;) {
                _list.add(line);
            }
        } catch (Exception ex) {
        }
        java.util.Collections.sort(_list, String.CASE_INSENSITIVE_ORDER);
        try(FileWriter writer = new FileWriter(file)) {
            for (String str : _list) {
                writer.write(str + "\n");
            }
            writer.close();
        } catch (IOException ex) {
        }
    }
}

答案 3 :(得分:0)

如果你已经能够在将结果写入文件之前对结果进行排序,为什么不在更新之前读取所有文件呢?然后,您可以将存储在数据结构中的旧数据与新数据放在一起,然后将它们组合在一起。然后你应该用你已经拥有的数据覆盖旧文件。

如果您的文件有大量记录,这种方式可能会很昂贵。

最好的方法是使用保持物品整齐的集合。看看PriorityQueue类。然后将其存储到文件中,并在添加新元素之前加载它。 您可以使用ObjectOutputStream将PriorityQueue写入文件,并使用ObjectInputStream将其读回。