【问题标题】:Apache Commons Net - System.getProperty("line.separator") - does not work in AndroidApache Commons Net - System.getProperty("line.separator") - 在 Android 中不起作用
【发布时间】:2014-06-23 18:33:17
【问题描述】:

我使用 Apache Commons API 使用 FTPClient 类将新行附加到文件中。当我在 Java 中运行以下代码时,会在 FTP 服务器上的文件中附加一个新行。但是,当我在 Android 中运行相同的代码时,字符串会附加到文件中而没有换行。

为什么Android下使用-System.getProperty("line.separator")的新行不通过FTP传输?

另外,新行在 LogCat 中正确显示,但在 FTP 服务器上的 txt 文件中不起作用。也许Java和Android的字符编码有区别?

非常感谢。

String log = System.getProperty("line.separator") + "blablabla";        
boolean done = ftpClient.appendFile("log.txt", new ByteArrayInputStream(log.getBytes("UTF-8")));

System.out.println("LOG: " + log);

【问题讨论】:

  • 您是否查看过您在两种情况下从System.getProperty("line.separator") 获得的信息?这几乎是要做的第一件事......
  • 在 Java 中,我返回一个长度为 2 的字符串,哈希码为 413。
  • 在 Android 中,我得到一个长度为 1 的字符串,哈希码为 10。
  • 我可以从中找出使用了哪些行分隔符吗??
  • @用户:你为什么要引用长度和哈希码,而不是实际的字符?但我可以肯定地告诉你,length=2 的那个是"\r\n"(你必须在 Windows 上这样做),length=1 的那个是"\n"。 (潜伏者:是的,我太迂腐了,我确实仔细检查了匹配的哈希码。)

标签: java android ftp apache-commons-net


【解决方案1】:

由于文件位于 服务器 上,我认为您不希望 client 的 值为 System.getProperty("line.separator"); 您想知道行分隔符是什么server 是,特别是当您(显然)以二进制模式工作时,因此 FTP 中间层无法为您进行行尾转换。 (这曾经——可能现在仍然是——对于 FTP 客户端和服务器来说是很常见的事情;它被称为“ASCII”模式。[啊,那些平静的日子,当我们认为我们可以假设文本是 ASCII 时,尽管内心深处知道那是不可持续的……就像两位数的年份……])

您可以从服务器查询该信息,也可以选择始终在服务器端日志文件中使用特定的行分隔符。如果是后者,如果您使用的是基于 *nix 的服务器,\n 将是一个不错的选择。如果您始终在服务器上的 Microsoft 堆栈中,那么 \r\n 可能是更好的选择。

【讨论】:

    【解决方案2】:

    Windows 使用 \r\n 作为其行分隔符,而 UNIX 只使用 \n 所以,尝试使用

    String log = "\n" + "blablabla"; 
    

    String log = "\r\n" + "blablabla"; 
    

    而不是

    String log = System.getProperty("line.separator") + "blablabla"; 
    

    【讨论】:

    • 我尝试使用 "\n" 但不幸的是它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2020-08-26
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多