gpt4 book ai didi

java - 如何强制 Windows 上的 Java 标准输出使用 "\n"行分隔符?

转载 作者:行者123 更新时间:2023-12-04 09:18:09 25 4
gpt4 key购买 nike

我正在为 git fast-import 编写前端.我必须使用 java(更具体地说是 Java 7),因为我从中提取的系统实际上只有一个 java api。我的一切都按照我认为应该的方式工作,除非我将标准输出通过管道传输到 fast-import我收到此错误:

fatal: Branch name doesn't conform to GIT standards: refs/heads/master 
当我查看行尾时,我看到有一个 cr lflf那应该在那里。我尝试使用 StringBuilder构建一个输出字符串插入 \n :
StringBuilder sb = new Stringbuilder("commit ref/heads/master\n");
那没有用....
所以认为这是 StringBuilder 的事情我试着写信给 stdout使用 print()将指定的行结尾保留为 \n .
System.out.print("commit refs/heads/master\n");
这似乎并没有奏效......
作为最后的努力,我尝试过:
System.setProperty("line.seperator","\n");
System.out.println("commit refs/heads/master");
那也失败了...
那么有没有办法写一个简单的 lf代替标准 cr lf在 Windows 控制台中?
更新: System.out.print("some text\n")仍然产生 cr lf .
更多引用这里是代码片段:
if(!isdevPath)
System.out.print("commit refs/heads/master\n");
else
System.out.print("commit refs/heads/devpath/" + devPathName + "\n");
System.out.print("mark " + rev.getRevision() + "\n");
System.out.print("committer " + rev.getAuthor() + " <> " + convertDate(rev.date) + "\n");
System.out.print(exportData(rev.getDescription()) + " \n" );
我在 powershell 中这样运行: Java -jar >> text.txt当我通过管道连接到 git fast-import 时,我仍然遇到同样的错误
这是 Notepad++ 的快照,您可以在其中看到行尾
enter image description here
解决方案
对此的答案很简单,您无法在基于 Windows 的 shell 中执行此操作。如果我在 Windows 系统中通过 bash 运行它,它会保留来自 print() 的换行符陈述。所以答案是使用 print()带有 \n 的语句你想要换行的地方。然后运行 ​​jar 和管道从 bash git fast-import。

最佳答案

PrintStream用途 System.lineSeparator() .您添加的任何为 line.separator 设置新值的代码(注意拼写正确)System.setProperty("line.separator","\n");不会改变System.lineSeparator() .
您可以创建一个新的 PrintStream,但有很多地方可以覆盖以使其适用于所有 println() 调用。相反,更容易将代码切换为使用 PrintWriter这需要一个覆盖 println确保您始终获得您希望的正确结局的方法:

static PrintWriter newPrintWriter(Writer out, String lineSep)
{
return new PrintWriter(out) {
public void println() {
print(lineSep);
}
};
}
此代码将正确写出:
    PrintWriter out = newPrintWriter(new OutputStreamWriter(System.out), "\n");
out.println("commit refs/heads/master");
out.println("mark XYZ");
out.println("committer ABC");
out.flush();
您可以使用此测试以显示行尾更改:
    try(PrintWriter out = newPrintWriter(new FileWriter("unix.txt"), "\n"))
{
out.println("commit refs/heads/master");
out.println("mark XYZ");
out.println("committer ABC");
}
try(PrintWriter out = newPrintWriter(new FileWriter("pc.txt"), "\r\n"))
{
out.println("commit refs/heads/master");
out.println("mark XYZ");
out.println("committer ABC");
}

关于java - 如何强制 Windows 上的 Java 标准输出使用 "\n"行分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63144771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com