【问题标题】:Write a text with multiple lines into a file with JSCH使用 JSCH 将多行文本写入文件
【发布时间】:2013-09-18 09:36:18
【问题描述】:

这也是一个 Unix 问题,所以,这里是交易:我在 Java 中有一个完整的 String 变量,它是一个 XML 文件的内容,我想用一个命令将整个文本写入一个文件,例如:

echo "<xml>
        <data>
        </data>
     </xml>" > basic.xml

对于这种文本,unix 给出的错误是

我已经用属性文件做了,但里面没有空格,所以它没有给我一个错误。

我还尝试用 $'\n' 替换 \n 字符,例如:

contentStr=contentStr.replaceAll("\n", "\\$'\n'");

但是 JSCH 给了我 unix 错误。

有什么想法吗?

谢谢

阿里

【问题讨论】:

  • JSCH? SSH/SCP 实现库?您还应该发布一些示例代码,以便我们知道您尝试了什么。
  • @dcsohl 编辑了示例。你的意思是JSCH代码吗?它与它无关,因为问题出在字符串上。就像,我正在传递类似“echo 'a \n b \n' > basic.xml”
  • 如果它不相关,那么它可能不应该被标记为 [jsch] 并且你不应该在帖子标题中提及它。您真正需要的只是调用 replaceAll() 的帮助...

标签: java file unix command jsch


【解决方案1】:

您为 replaceAll 提供的示例不太正确。您正在用反斜杠替换回车符,然后是美元,然后是单引号、回车符、单引号。我认为您正在寻找用反斜杠、美元、单引号、反斜杠、n、单引号替换它?去掉实际的回车并用某种转义序列替换它?

试试contentStr=contentStr.replace("\n", "$'\\n'");

关于replaceAll() 要记住的是,如果您在第二个字符串中有反斜杠或美元,您可能会得到有趣的结果。来自文档:“请注意,替换字符串中的反斜杠 () 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时不同。美元符号可能被视为对捕获的子序列的引用如上所述,反斜杠用于转义替换字符串中的文字字符。”在这里使用replace() 是一个更好的选择。

【讨论】:

  • 不,没用,但我发现了。不管怎么说,还是要谢谢你。只需检查答案
【解决方案2】:
contentStr=contentStr.replace("\n", "\\n");
contentStr=contentStr.replace("\"", "\\\"");            

writeOperation.setCommand("printf \""+contentStr+"\" > "+source.getPath());

这就是答案。反正有点;)

【讨论】:

    猜你喜欢
    • 2022-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    相关资源
    最近更新 更多