You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

转换Spool文件为文本时,如何避免FileOutputStream写入空行?

解决Spool文件转文本后每行自动添加空行的问题

你遇到的这个每行后自动加空行的问题,大概率是换行符格式不匹配导致的——Spool文件转换后的字节流里,换行可能是Windows风格的\r\n,而你直接写入文件时没有做处理,或者转换过程中额外生成了重复的换行标记。你的代码现在是把字节流原封不动写入文件,相当于完全保留了转换后的换行格式,所以才会出现多余空行。

给你两种可行的解决思路:

思路1:读取时统一处理换行符

通过把字节流转换成字符流,逐行读取并重新写入统一格式的换行符,这样就能消除多余空行。修改后的代码如下:

PrintObjectTransformedInputStream txtInStream = spooledFile.getTransformedInputStream(plist);
if(txtInStream != null) {
    // 获取文件编码,避免乱码
    String codepage = spooledFile.getStringAttribute(PrintObject.ATTR_CODEPAGE);
    // 用指定编码包装输入流,逐行读取
    BufferedReader reader = new BufferedReader(new InputStreamReader(txtInStream, codepage));
    FileWriter writer = new FileWriter(fileName);
    
    String line;
    while ((line = reader.readLine()) != null) {
        // 写入当前行,然后添加你需要的换行符(比如Unix风格的\n)
        writer.write(line);
        writer.write("\n");
    }
    
    // 记得关闭流
    writer.close();
    reader.close();
}

readLine()方法会自动识别任何类型的换行符(\r\n、\r、\n)并将其剔除,之后我们手动添加统一的换行符,就能保证每行后不会出现多余空行。

思路2:检查转换参数plist

你调用getTransformedInputStream(plist)时,这个参数列表里可能有控制输出换行格式的配置项。比如部分Spool转换工具允许指定输出的换行类型(比如LF或CRLF),如果能找到对应的配置,直接在转换阶段就指定正确的换行格式,会比事后处理更高效。你可以查一下对应API的文档,看看有没有类似ATTR_LINE_ENDING这类的属性可以设置。

内容的提问来源于stack exchange,提问作者Raframi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:48:40