导航目录结构并唯一地命名每个处理过的文件

时间:2015-04-20 06:44:46

标签: java outputstream

我有一个start / one / two / 表格的目录结构three / *files*

我的目标是构建这个程序,以便它可以自动导航我的目录结构,抓取每个文件然后处理它,它似乎正确地做了。

我还需要将输出写入具有唯一名称的新文件,即应处理名为00001.txt的文件,并将结果写入{{1 }}

我以为我正确实施了这一点,但显然没有。

我哪里误入歧途?

00001_output.txt

This也是我的问题,它可能会对我实际尝试做的事情提供一些额外的见解。

1 个答案:

答案 0 :(得分:1)

System.setOut似乎是一个坏主意。

下面是一些可能有效的未经测试的代码。

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import org.apache.commons.io.FilenameUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class App {

    public static void main(String[] args) throws IOException {
        String dirStart = "/home/data/";

        Path root = Paths.get(dirStart);

        Files.walkFileTree(root.toAbsolutePath().normalize(), new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, java.nio.file.attribute.BasicFileAttributes attrs) throws IOException {

                // CHANGE OUTPUT TO NEW FILE
                String print_file = file.getFileName().toString();
                String fileNameWithOutExt = FilenameUtils.removeExtension(print_file);
                System.out.println(fileNameWithOutExt);

                // SOUP PART
                String everything = new String(Files.readAllBytes(file), StandardCharsets.UTF_8);

                Document doc = Jsoup.parse(everything);
                String link = doc.select("block.full_text").text();

                try (PrintStream out = new PrintStream(new FileOutputStream(fileNameWithOutExt + "_output.txt"))) {
                    out.println(link);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                return FileVisitResult.CONTINUE;
            }
        });
    }

}