首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apache-commons println方法不会在输出中打印换行符。

apache-commons println方法不会在输出中打印换行符。
EN

Stack Overflow用户
提问于 2019-04-10 06:42:02
回答 2查看 2.2K关注 0票数 4

我是Apache-Commons-CSV1.6的新手

我有一个基本要求打印csv文件与每一个记录在新的行。我试着用CSVPrinter的println方法。由于一些奇怪的原因,输出文件没有任何换行符。所有的东西都是用一行印刷的。

我尝试在Notepad++中打开输出并显示不可打印的字符。记录之间没有字符。任何帮助都将不胜感激。谢谢。

代码语言:javascript
复制
CSVPrinter csvPrinter = null;

if(delimiter != null && delimiter.length() > 0) {
    csvPrinter = new CSVPrinter(new FileWriter(outputFile), CSVFormat.newFormat(delimiter.charAt(0)).withHeader(header));
}else {
    csvPrinter = new CSVPrinter(new FileWriter(outputFile), CSVFormat.DEFAULT.withHeader(header));
}

for(Map<String,String> record : inputList) {
    List<String> valueList = new ArrayList<String>();
    for(String key : record.keySet()) {
        valueList.add(record.get(key));
    }
    System.out.println(valueList);
    csvPrinter.printRecord(valueList);
    csvPrinter.println();
}
csvPrinter.close();

预期结果:

id\##.#.

4|excel|0|excel.sheet.no

5\x{e 010}excel\dd/MM/yyyy_

6|excel|0|excel.baserate.rownum

实际结果: id|type|value|key4|excel|0|excel.sheet.no5|excel|dd/MM/yyyy|excel.date.format6|excel|0|excel.baserate.rownum

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-10 07:05:55

如果不想覆盖所有newFormat分隔符,请不要使用方法

如果要从头创建CSVFormat,请使用此方法。除分隔符外,所有字段都将初始化为null/false。

如果要在每个记录中添加新的行分隔符,请添加withRecordSeparator

代码语言:javascript
复制
CSVFormat.newFormat(delimiter.charAt(0)).withHeader(header)).
 withRecordSeparator(System.getProperty("line.separator"));

返回一个新的CSVFormat,其格式的记录分隔符设置为指定字符。 注意:此设置仅在打印期间使用,不影响解析。解析目前只适用于“\n”、“\r”和“\r”的输入。

票数 3
EN

Stack Overflow用户

发布于 2020-03-24 13:14:41

我也有同样的问题,改变withRecordSeparator没有帮助。对于解决方案,我将直接打印新行,如:

代码语言:javascript
复制
private static final char DELIMITER_CHAR = ',';

        try (CSVParser parser = CSVFormat.newFormat(DELIMITER_CHAR).withTrailingDelimiter(false)
                .withRecordSeparator('\n').parse(new InputStreamReader(new ByteArrayInputStream(bytes)));
             CSVPrinter printer = CSVFormat.newFormat(DELIMITER_CHAR).print(destinationFile, Charset.defaultCharset())) {
            for (CSVRecord record : parser) {
                try {
                    printer.printRecord(record);
                   // printer.println(); // TODO not working
                   printer.print('\n'); // work around solution 
                } catch (Exception e) {
                    throw new RuntimeException("Error at line " + parser.getCurrentLineNumber(), e);
                }
            }
            printer.flush();
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55606236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档