【问题标题】:Writing comma separated values in a single cell using outputstream使用输出流在单个单元格中写入逗号分隔值
【发布时间】:2022-12-15 07:03:35
【问题描述】:

Outputstream 不会在单个单元格中写入逗号分隔值,而是打破值并在每个单元格中写入每个逗号分隔值。

我的机器中有一个 csv 文件。在 csv 文件中,几乎没有包含逗号分隔值的值写在一个单元格中(如图 A 中突出显示的那样)。

我正在尝试将文件的内容写入另一个位置。所以我从 X 位置读取文件作为输入流,并使用输出流将输入流写入另一个位置。

预期输出(PIC A):

实际输出(图 B):

由于文件在单元格内具有逗号分隔值(即 PIC A 中突出显示的值),因此在写入输入流时,必须在单元格中写入的逗号分隔值将打印在下一个单元格中,以便其他值也被移动. (如图B所示)。

片段:

        
        try {
            int read;
            while ((read = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }
        } catch (Exception e) {
            
        }

如果有任何其他方法可以解决此问题,请告诉我。

【问题讨论】:

  • 永远不要隐藏异常。如果你这样做,你永远不会知道你遇到了什么问题
  • 请展示一个完整的、可运行的例子。 inputStream 和 outputStream 是什么类?
  • 如果你看原来的电子表格程序中的 .csv 文件,它的行为是否符合您的预期?
  • @tgdavies 是的,原始文件按预期打开。使用的类是:import java.io.File;导入 java.io.FileInputStream;导入 java.io.FileOutputStream;
  • @Stultuske 因为这是一个示例 sn-p,所以我将其留空...将在必要时记录/抛出异常。

标签: java inputstream outputstream


【解决方案1】:

默认情况下,CSV(逗号分隔值)用逗号分隔文本。为避免这种情况,

使用双引号将字符串包裹起来 StringEscapeUtils.escapeCsv(); 以上方法,将具有特殊字符的字符串用双引号括起来。

使用 concat 方法写入 CSV, 连接(“,”+“ "); 上面的语句将逗号添加到整个字符串。

前任。 字符串 escapedValues= StringUtils.escapeCsv(str): this.writer.write(escaped.concat(","+" "));

this.writer — 文件写入器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多