Apache Commons Net - System.getProperty(“line.separator”) - 在Android中不起作用

时间:2014-06-23 18:33:18

标签: java android ftp apache-commons-net

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

为什么新行使用--System.getProperty(" line.separator") - 在Android下不通过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);

2 个答案:

答案 0 :(得分:0)

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

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

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

而不是

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

答案 1 :(得分:0)

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

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