【问题标题】:Output file in a certain way via Java通过Java以某种方式输出文件
【发布时间】:2015-10-05 23:12:33
【问题描述】:

有点问题。我已经根据时间戳顺序成功输出了一个文件,但是,如果时间戳相同,我还尝试添加另一个条件以按字母顺序排列。

例如:

[TIMESTAMP = 12:30][EVENT=B]

[TIMESTAMP = 12:30][EVENT=U]

[TIMESTAMP = 12:30][EVENT=A]

我希望它输出

[TIMESTAMP = 12:30][EVENT=A]

[TIMESTAMP = 12:30][EVENT=B]

[TIMESTAMP = 12:30][EVENT=U]

我目前的代码:

package Organiser;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Organiser {

    public static void main(String[] args) throws FileNotFoundException {
        ArrayList<String> lines = new ArrayList<>();
        String directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1";
        Scanner fileIn = new Scanner(new File(directory + ".txt"));
        PrintWriter out = new PrintWriter(directory + "_ordered.txt");

        while (fileIn.hasNextLine() == true) {
            lines.add(fileIn.nextLine());
            Collections.sort(lines);
            System.out.println("Reading...");
        }

        for (String output : lines) {
            out.println(output + "\n");
        }

        out.close();
        System.out.println("Complete - See " + directory + "_ordered.txt");
    }
}

任何想法

编辑:这仅用于示例数据,我只希望在时间戳相同时发生这种情况,否则,它将根据时间戳相应地排序。

示例文件:

https://www.dropbox.com/s/611psg6qw4nl9pw/ex1.txt?dl=0

【问题讨论】:

    标签: java


    【解决方案1】:
    1. 您不应该在每次添加一行时对您的Collection 进行排序!将Collections.sort(lines);放在while循环之后

    2. 生成的代码应该已经可以解决问题了...我已经在我的系统上对其进行了测试,它确实有效!

    【讨论】:

    • 在我有多个时间戳的更大范围内,输出文件最终将根据事件而不是时间戳进行组织。我想保留 TIMESTAMP 的顺序,但是当 TIMESTAMP 时间相同时,只能按 EVENT 排序。
    • @MubeenHussain 这正是正在发生的事情......您可能想向我们展示更多信息(例如文件的内容),以便我们检测可能导致问题的其他问题
    【解决方案2】:

    它应该默认发生。 (因为“U”>“B”>“A”)

    public static void main(String[] args) {
            ArrayList<String> lines = new ArrayList<>();
            lines.add("[TIMESTAMP = 12:30][EVENT=B]");
            lines.add("[TIMESTAMP = 12:30][EVENT=A]");
            lines.add("[TIMESTAMP = 12:30][EVENT=U]");
    
            // unsorted
            System.out.println(lines);
            // default sorting of Strings will sort A before U
            Collections.sort(lines);
            System.out.println(lines);
        }
    

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2011-05-28
      • 2014-10-23
      • 2017-07-06
      相关资源
      最近更新 更多