【发布时间】:2020-05-03 06:48:57
【问题描述】:
我需要克服我目前遇到的 Unix - Windows 文件格式(LF 到 CRLF)问题。 我使用的 ftp 客户端是 Jcraft 的 Jsch。
网上的文档很简陋,虽然我遇到了一个可以设置的标志
SSH_FXF_TEXT_MODE
启用 ASCII 模式,但我没有看到我应该在代码本身中设置它的位置,也没有看到这些 Javadocs 中提到它
以下是我自己尝试的解决方法。 “新添加”行显示了我如何获取文件并将其转换为 ASCII 编码字符串,然后我使用 channelSftp put 方法将其传输。 最初我只是将文件本身放在上面。
final JSch jsch = new JSch();
final Session session = jsch.getSession(username, host);
session.setPassword(password);
session.connect();
final Channel channel = session.openChannel("sftp");
channel.connect();
final ChannelSftp channelSftp = (ChannelSftp) channel;
channelSftp.cd(destDir);
File file = new File(pathName);
String content = FileUtils.readFileToString(file, "US-ASCII"); // Newly Added
channelSftp.put(content, fileToTransfer.getName());
请注意,我省略了异常处理和其他实践,只是为了代码 sn-p 的清晰。
这种变通方法会成功,还是 Jsch 看似默认的二进制模式会覆盖 ASCII 编码字符串并照常传输?
我会测试一下,我只是想知道你们中是否有人能直接说出来? 或者确实知道如何/在哪里设置 Text_Mode 标志! :)
另外,我使用的 Jsch 版本是 jsch-0.1.49.jar。
【问题讨论】:
-
我认为最快的方法就是使用
content = content.replaceAll(content, "\r\n", "\n"),反之亦然。