迭代csv文件改进的前6列[已关闭]

balp4ylt  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(234)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

昨天关门了。
Improve this question
我想出了一个csv阅读器,它只会遍历csv文件的前6列。我知道opencsv是一个更好的选择,但在我的情况下,这并不重要,所以我只用了核心java。一切都很好,但我知道可能有更有效的方法来打印csv文件的前6列,比我想出的东西用更少的代码。所以我“我在问外面的javaMaven,我怎样才能改进这段代码?

private static void csvReader(String loc) throws IOException {

        File file = new File(loc);
        List<String> lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
        
        String DELIMITER = ";";
        
        for(String line : lines) {
            
            String[] array = line.split(DELIMITER);         
            System.out.println(array[0] + " " + array[1] + " " + array[2] + " " + array[3] + " " + array[4] + " " + array[5]);

        }
}

一切都很有帮助,提前感谢!

xkrw2x1b

xkrw2x1b1#

如果您已经在使用较新的java.nio.Files,则不必使用较旧的java.io.File包将文件转换为path。请改用Path.of()方法。示例:

List<String> lines = Files.readAllLines(Path.of(loc), StandardCharsets.UTF_8);

使用try-with-resources来确保资源在阅读完成后或尝试时抛出异常时关闭。如果任务只是将内容打印到控制台,则将文件内容读入流并链接forEach调用,而不是先将其读入列表。可以使用stream.limit来限制要输出的列。

private static void csvReader(String loc) throws IOException {
    String DELIMITER = ";";
    try (final Stream<String> input = Files.lines(Path.of(loc), StandardCharsets.UTF_8)) {
        input.map(line -> Arrays.stream(line.split(DELIMITER))
                                .limit(6)
                                .collect(Collectors.joining(" ")))
             .forEach(System.out::println);
    }
}

相关问题