gpt4 book ai didi

java - 将多个同名文件合并为一个文件

转载 作者:行者123 更新时间:2023-12-02 05:47:58 26 4
gpt4 key购买 nike

所以我一直在试图弄清楚如何才能实现这一目标。我有一个名为“part1.txt”的文件,它出现在多个目录中。例如,它出现在目录中:

 usr/documents/trial/part1.txt

usr/documents/trial2/part1.txt

usr/documents/zip/part1.txt

每个part1.txt 文件都包含不同类型的信息。我想编写一个java程序将所有这些文件合并到一个文件中。有没有一种方法可以在java中实现这一点?或者我应该使用hadoop来执行这样的任务?如果有人能告诉我如何编写这个程序,那就太好了。

最佳答案

首先查看 Basic I/O

本质上,您需要对要包含的目录进行递归搜索并将内容附加到其他文件

例如,您可以简单地创建一个 BufferedWriter,它允许您将内容写入特定文件(或主文件),在本例中为特定文件(或主文件)...

public static void main(String[] args) {
File output = new File("Master-Part1.txt");
try (BufferedWriter bw = new BufferedWriter(new FileWriter(output))) {
findAndAppend(new File("."), bw);
} catch (IOException exp) {
exp.printStackTrace();
}
}

您需要扫描特定文件以查找任何匹配项 (part1.txt),并将其内容附加到 BufferedWriter(如果找到)。

完成当前目录后,您需要尝试扫描子目录(如果有)...

public static void findAndAppend(File parent, BufferedWriter bw) throws IOException {

// Find any matching files...
File files[] = parent.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().equals("part1.txt");
}
});

// Append any results...technically there should only be 0-1
// matches, but this is a nice example ;)
for (File file : files) {
append(file, bw);
}

// Find the sub directories...
File dirs[] = parent.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
});

// Scan the sub directories...
for (File dir : dirs) {
findAndAppend(dir, bw);
}

}

最后,您需要能够将任何匹配的内容写入您的主文件...

protected static void append(File file, BufferedWriter bw) throws IOException {

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String text = null;
while ((text = br.readLine()) != null) {
bw.write(text);
bw.newLine();
}
} finally {
}

}

此示例使用 Java 7 的 try-with-resources功能,因此请确保您运行的是 Java 7。

看看java.io.File了解更多详情

已更新 walkFileTree 示例 (Java 7)

public static void main(String[] args) {
File master = new File("Master-part1.txt");
try (BufferedWriter bw = new BufferedWriter(new FileWriter(master))) {
Path path = master.toPath();
Files.walkFileTree(path, new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.toFile().getName().equals("part1.txt")) {
append(file.toFile(), bw);
}
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
} catch (IOException exp) {
exp.printStackTrace();
}
}

protected static void append(File file, BufferedWriter bw) throws IOException {

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String text = null;
while ((text = br.readLine()) != null) {
bw.write(text);
bw.newLine();
}
} finally {
}

}

关于java - 将多个同名文件合并为一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23863475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com