【问题标题】:Java BufferedWriter is not handling tab space properly [closed]Java BufferedWriter 未正确处理选项卡空间 [关闭]
【发布时间】:2013-04-16 09:28:19
【问题描述】:
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new ByteArrayOutputStream(), encoding)); 

public void write(final List<Column> columnsList) throws IOException {
        String data = null;
        int length = columnsList.size();
        int writeIndex = 0;
        for (Column cd : columnsList) {
            data = cd.getData();            
            writer.write(data);
            writer.write(getDelimiter()); // it will return '\t'
        }
        writer.write("\n");
    }

上面的代码并没有将制表符空间放在文件中,实际上它在文件中写入了\t。 当我用硬编码的“\t”写文件时,它确实写了制表符空间。但我收到了来自 web 端的“\t”分隔符。 我只是选择这个分隔符并与作家一起写作。但是当我在记事本中打开文件时,文件中实际上写的是“\t”而不是TAB SPACE

我正在用其他方法关闭作者,所以不用担心关闭作者

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE。
  • @AndrewThompson 为什么? \t 不是一个有效的 java 转义序列吗?
  • 真的不会这样。我怀疑问题出在您查看文件的方式上,而您没有告诉我们。
  • 我尝试了一个简单的代码BufferedWriter writer = new BufferedWriter(new FileWriter(new File("c:\\ak\\1.txt"))); writer.write("\t"); writer.close();,并在文件中写入tab。
  • @PermGenError 承认。应该只坚持第一条评论。 :P

标签: java file-io


【解决方案1】:

嗯,我很确定getDelimiter() 会返回两个字符的“\t”。

您可以通过getDelimiter().toCharArray();进行验证

简单的解决方案是使用如下代码 sn-p

if (getDelimiter().equalsIgnoreCase("\\t")) then use String.valueOf('\t')

【讨论】:

    【解决方案2】:

    也试过了。

    工作正常!检查此how to use "tab space" while writing in text file 帖子,因为您可能需要一些配置。

    发布整个方法以获得更多信息

    FileWriter fstream = new FileWriter("bot.txt", true); //true tells to append data.
    BufferedWriter out = new BufferedWriter(fstream);
    
    out.write("bbb" + "\t"+"aaa");
    out.close();`
    

    【讨论】:

      【解决方案3】:

      您没有初始化 BufferedWriter 对象。 这是一个example,介绍了如何使用 bufferedwriter 在 java 中写入文件

      【讨论】:

      • 我刚刚展示了我实际在做什么以及发生了什么。所以很明显我已经初始化了BufferedWriter
      【解决方案4】:

      检查这个问题,也许你在初始化 BufferedWriter 之前遗漏了什么

      how to use "tab space" while writing in text file

      【讨论】:

        【解决方案5】:

        您的编写器定义不完整,因此我们不知道您使用的是哪个底层流/编写器。

        这个例子对我有用:

        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(System.out));
        writer.write("a");
        writer.write("\t");
        writer.write("b");
        writer.close();
        

        它在“a”和“b”之间打印一个制表符。

        【讨论】:

          【解决方案6】:

          你应该调用 writer.close();

          你做的吗?

          【讨论】:

          • 这无法解释在文件中看到"\t"。
          猜你喜欢
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多