【问题标题】:Merge contents of file of files starting with a prefix合并以前缀开头的文件的文件内容
【发布时间】:2017-05-18 15:32:13
【问题描述】:

如何在 Java 中合并以某个模式开头的文件。

我有以下文件:

UW110_file_1.dat

ROW1   DATA1  SOMESTUFF1
ROW2   DATA2  SOMESTUFF2

UW110_file_2.dat

ROW3   DATA3  SOMESTUFF3
ROW4   DATA4  SOMESTUFF4

UW110_file_2.hdr

ROW3   DATA3  SOMESTUFF3
ROW4   DATA4  SOMESTUFF4

我需要检查所有以 UW110 开头、扩展名为 .dat 的文件并将它们合并。

在这种情况下,我必须创建如下文件

UW110_file

ROW1   DATA1  SOMESTUFF1
ROW2   DATA2  SOMESTUFF2
ROW3   DATA3  SOMESTUFF3
ROW4   DATA4  SOMESTUFF4

【问题讨论】:

  • 在从文件中解析数据时,使用 HashTable 将有助于确保数据的唯一存储。使用 ROW# 作为字符串键,其余数据作为值

标签: java file bufferedreader


【解决方案1】:

创建一个带有文件所在路径的File对象,我们称之为datFolder

public String getMergedFiles(File datFolder) {
    ArrayList<File> files = new ArrayList<>();
    files.addAll(Arrays.asList(datFolder.listFiles((f) -> f.getName().endsWith(".dat") && f.getName().startsWith("UW110"))));

    StringBuilder sb = new StringBuilder();

    for (File datFile : files) {
        InputStream is = new FileInputStream(datFile);
        BufferedReader buf = new BufferedReader(new InputStreamReader(is));

        String line = buf.readLine();
        while(line != null) {
            sb.append(line).append("\n");
            line = buf.readLine();
        }

        buf.close();
        is.close();
    }

    return sb.toString();
}

public void writeToFile(String input, File file) {
    PrintWriter out = new PrintWriter(file);
    try{
        out.println(input);
    }catch(Exception e){
        e.printStackTrace();
    }
    out.close();
}

// Somewhere in your code
File folder = new File("myFolder");
writeToFile(getMergedFiles(folder), new File("outputFile.dat"));

虽然这使用了 lambda,但如果您不使用 java 8,请查看它们是如何工作的,应该很容易将它变成一个循环。

没有测试此代码,但我相信它应该可以工作。如果没有,可能需要快速修复。

你可以简单地将这个方法返回的字符串写到一个文件中,你应该有你的最终文件!

享受:)

【讨论】:

  • 您只需将文件添加在一起,而不是对输出进行排序,也不会确保唯一性
  • 这不正是作者要求的吗?而且我敢肯定他足够聪明,可以查找“如何在 java 中写入文件”以简单地将返回的字符串写入文件
  • 他在问如何合并上面的例子。这不会在问题中输出像 UW110_file 这样的文件
  • 哎呀,我会添加一个 writeFile 方法来让您享受观看乐趣然后编辑:您现在开心吗?
  • 不想挑剔,但你的解决方案并不能解决任何问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 2019-01-28
  • 2016-08-29
  • 1970-01-01
  • 2020-07-17
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多