【问题标题】:Newline in windows窗口中的换行符
【发布时间】:2013-11-12 12:54:29
【问题描述】:

当我在 Windows 中使用\r\n 在文件中打印换行符时,如果文件是<anyfile>.v,它就可以工作,即它的扩展名是.v。但是如果文件扩展名更改为.ucf,它就会开始打印一些垃圾。我是通过 Java 代码来实现的。有什么帮助吗?

.v 是一个 verilog 文件,.ucf 是一个赛灵思专有约束文件。两者都由 Xilinx 软件处理。

跑步时,

import java.io.*;
public class ucf {
public static void main(String[] args) throws IOException {
FileWriter output = new FileWriter("sample.ucf");
output.write("foo\r\n\bar\r\n");
output.close();
}
}

产生了垃圾。

【问题讨论】:

  • 请告诉我们.v.ucf 文件是什么。大概它们是由一个特定的程序处理的,该程序可以决定如何处理它们。
  • 不正确。 Java 不关心文件扩展名。
  • .v 是一个 verilog 文件,.ucf 是一个赛灵思专有的约束文件。它们都由 Xilinx 软件处理。
  • @kamalbanga 那么这是 Xilinx 支持的案例,而不是 SO。
  • @Ingo 但你自己说过 Java 不关心文件扩展名。

标签: windows newline xilinx


【解决方案1】:

听起来您正在写信给WriterPrintWriter

编写器需要CharSet(例如UTF-8)才能将字符转换为二进制数据。如果您在构建 Writer 时没有明确提供字符集,则将使用 JVM's default charset

我猜您使用一个字符集编写文件,而赛灵思正在使用不同的字符集读取文件,从而导致赛灵思出现垃圾。

请注意,\r\n 并不是所有操作系统的标准。要在运行时获取操作系统的换行符,您可以使用System.getProperty("line.separator") 而不是硬编码。

【讨论】:

  • +1 猜的不错。我希望发帖者能花费一半的精力来阐述他们的问题并提供行为错误的代码示例。
  • 是的,因为我通常使用原始流,所以我没有想到整个 Writer 问题。好电话。
  • @lance 感谢System.getProperty,正是我需要的:)
猜你喜欢
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多