18

我有很多.txt文件。我想将它们连接起来并生成一个文本文件。
我将如何在 Java 中做到这一点?


以下是案例

file1.txt file2.txt 

连接结果为

file3.txt

这样 的内容后面file1.txt跟着file2.txt

4

5 回答 5

35

使用Apache Commons IO

您可以使用Apache Commons IO库。这有FileUtils课。

// Files to read
File file1 = new File("file1.txt");
File file2 = new File("file2.txt");

// File to write
File file3 = new File("file3.txt");

// Read the file as string
String file1Str = FileUtils.readFileToString(file1);
String file2Str = FileUtils.readFileToString(file2);

// Write the file
FileUtils.write(file3, file1Str);
FileUtils.write(file3, file2Str, true); // true for append

此类中还有其他方法可以帮助以更优化的方式完成任务(例如使用列表)。

使用Java 7+

如果您使用的是 Java 7+

public static void main(String[] args) throws Exception {
    // Input files
    List<Path> inputs = Arrays.asList(
            Paths.get("file1.txt"),
            Paths.get("file2.txt")
    );

    // Output file
    Path output = Paths.get("file3.txt");

    // Charset for read and write
    Charset charset = StandardCharsets.UTF_8;

    // Join files (lines)
    for (Path path : inputs) {
        List<String> lines = Files.readAllLines(path, charset);
        Files.write(output, lines, charset, StandardOpenOption.CREATE,
                StandardOpenOption.APPEND);
    }
}
于 2012-05-20T17:55:04.923 回答
17

逐个文件读取并将它们写入目标文件。类似于以下内容:

    OutputStream out = new FileOutputStream(outFile);
    byte[] buf = new byte[n];
    for (String file : files) {
        InputStream in = new FileInputStream(file);
        int b = 0;
        while ( (b = in.read(buf)) >= 0)
            out.write(buf, 0, b);
        in.close();
    }
    out.close();
于 2012-05-20T17:19:44.277 回答
4

这对我来说很好。

// open file input stream to the first file file2.txt
InputStream in = new FileInputStream("file1.txt");
byte[] buffer = new byte[1 << 20];  // loads 1 MB of the file
// open file output stream to which files will be concatenated. 
OutputStream os = new FileOutputStream(new File("file3.txt"), true);
int count;
// read entire file1.txt and write it to file3.txt
while ((count = in.read(buffer)) != -1) {
    os.write(buffer, 0, count);
    os.flush();
}
in.close();
// open file input stream to the second file, file2.txt
in = new FileInputStream("file2.txt");
// read entire file2.txt and write it to file3.txt
while ((count = in.read(buffer)) != -1) {
    os.write(buffer, 0, count);
    os.flush();
}
in.close();
os.close();
于 2012-05-20T17:29:57.637 回答
1

您的意思是您需要一个包含其他文本文件内容的文件?然后,读取每个文件(您可以循环执行),将它们的内容保存在 StringBuffer/ArrayList 中,并通过将 StringBuffer/ArrayList 中保存的文本刷新到最终的 .txt 文件来生成最终的 .txt 文件。

别担心,这是一件容易的事。只要习惯给定的系统,就可以了:)

于 2012-05-20T17:16:31.417 回答
0

听起来像家庭作业...

  1. 打开文件 1
  2. 打开文件 2
  3. 创建/打开文件 3
  4. 从文件 1 读取并写入文件 3
  5. 关闭文件 1
  6. 从文件 2 读取并写入文件 3
  7. 关闭文件 2
  8. 关闭文件 3

如果您需要知道如何在 Java 中创建/打开/读取/写入/关闭文件,请搜索文档。这些信息应该被广泛使用。

于 2012-05-20T17:16:07.267 回答