当前位置: 首页 > 知识库问答 >
问题:

如何检测流中的第一个文件

丘飞
2023-03-14

我有cp1250编码的源文件。所有这些文件都位于dirname目录或其子目录中。我想通过添加它们的内容将它们合并到一个UTF-8文件中。不幸的是,我在结果文件的开头得到了空行。

public static void processDir(String dirName, String resultFileName) {
    try {
        File resultFile = new File(resultFileName);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(resultFile), "utf-8"));
        Files.walk(Paths.get(dirName)).filter(Files::isRegularFile).forEach((path) -> {
            try {
                Files.readAllLines(path, Charset.forName("Windows-1250")).stream().forEach((line) -> {
                    try {
                        bw.newLine();
                        bw.write(line);                     
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        bw.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

原因是我不知道如何检测我的流中的第一个文件。

我想出了一个非常愚蠢的解决方案,它不依赖于溪流,所以它不能令人满意:

public static void processDir(String dirName, String resultFileName) {
        try {
            File resultFile = new File(resultFileName);
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(resultFile), "utf-8"));
            Files.walk(Paths.get(dirName)).filter(Files::isRegularFile).forEach((path) -> {
                try {
                    Files.readAllLines(path, Charset.forName("Windows-1250")).stream().forEach((line) -> {
                        try {
                            if(resultFile.length() != 0){
                                bw.newLine();
                            }
                            bw.write(line);
                            if(resultFile.length() == 0){
                                bw.flush();
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    });
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

共有1个答案

桓信鸥
2023-03-14

您可以使用FlatMap创建所有文件的所有行的流,然后再次使用FlatMap将其与行分隔符交织,然后使用skip(1)跳过前导分隔符,如下所示:

public static void processDir(String dirName, String resultFileName) {
    try(BufferedWriter bw = Files.newBufferedWriter(Paths.get(resultFileName))) {
        Files.walk(Paths.get(dirName)).filter(Files::isRegularFile)
            .flatMap(path -> {
                try {
                    return Files.lines(path, Charset.forName("Windows-1250"));
                } catch (IOException e) {
                    throw new UncheckedIOException(e);
                }
            })
            .flatMap(line -> Stream.of(System.lineSeparator(), line))
            .skip(1)
            .forEach(line -> {
                try {
                    bw.write(line);
                } catch (IOException e) {
                    throw new UncheckedIOException(e);
                }
            });
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}

通常,使用flatmap+skip组合可以帮助解决许多类似的问题。

还要注意files.newBufferedWriter方法,它是创建BufferedWriter的更简单方法。别忘了尝试资源。

 类似资料:
  • 我在试着写一个函数 匿名的名字。下面是一些输入和输出对的示例,让您了解它应该做什么: 该函数应该适用于由任意字符组成的名称。在实现此功能时,我有以下问题: 给定一个或,我如何计算出我必须使用多少个符文才能获得一个完整的字符,完整的意思是与该字符对应的所有修饰符和组合重音也被使用。例如,如果输入是(对应于字符串BC,其中δ表示为A和组合diaresis的组合),该函数应该返回2,因为前两个符文会产生

  • rank ▲ ✰ vote url 4 1266 285 929 url 用Python如何一个文件是否存在? 不用try:语句可以一个文件存在 如果不确定文件存不存在,可以这样做: import os.path os.path.isfile(fname)

  • 问题内容: 我有一个JSON对象流,就像通过TCP或WebSockets的JSON- RPC一样。没有长度前缀或定界符,因为JSON是自定界的。因此,当我从流中读取内容时,可能会遇到如下所示的结果: 我需要一个一个地解析每个JSON对象。我无法使用JSON.parse做到这一点,因为它只会在末尾抛出无关数据的语法错误。 当然,在这个示例中,我可以逐行进行,但是我不能依赖像这样的空白。JSON-RP

  • 最近,我已经完成了检测循环中第一个节点的算法,如下所述:- 注:本声明摘自以下网站:- http://javabypatel.blogspot.in/2015/12/detect-loop-in-linked-list.html 步骤1:找到循环后,两个指针都指向在循环内的交汇点的公共节点, 步骤2:现在,在它们之间移动一个指针(比如乌龟)到列表的头部,保持野兔指针在循环内的交汇点的相同位置。 步

  • 本文向大家介绍如果做一个杯子的检测,你如何测试相关面试题,主要包含被问及如果做一个杯子的检测,你如何测试时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 功能 (1)水倒水杯容量的一半 (2)水倒规定的安全线 (4)水杯容量刻度与其他水杯一致 (5)盖子拧紧水倒不出来 (6)烫手验证 性能 (1)使用最大次数或时间 (2)掉地上不易损坏 (3)盖子拧到什么程度水倒不出来 (4)保温时间长 (

  • 我试图在黑白道路上探测一个白色物体,让一辆自动遥控汽车在它周围行驶。除了路上的白色盒子,我什么都能探测到。 我所尝试的可以在我的代码示例中看到 我在寻找一种在障碍物周围画边界框的方法。问题是我不知道如何从剩下的盒子里取出这个盒子。这可能是因为长方体的轮廓和右边的线是相连的,这就是为什么边界框那么大。如果有人知道怎么做就好了。 点击这里查看结果 第一:输入图像 第二:适应阈值之后 第三:轮廓(粉色)