我需要解决我目前遇到的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());

请注意,为了简化代码段,我省略了异常处理和其他实践。

这个解决方法会成功吗,还是Jsch貌似默认的二进制模式会覆盖ASCII编码的字符串并像往常一样传输它?

我将对其进行测试,我只是想知道你们中是否有人可以直接说出来?
或者确实知道如何/在何处设置Text_Mode标志! :)

另外,我正在使用的Jsch版本是jsch-0.1.49.jar。

最佳答案

文本模式标志已添加到SFTP协议版本4。Jsch currently supports SFTP protocol version 3,未指定文本模式标志。

您可以看到SFTP规范修订版列表here。协议版本3的RFC为here。请注意,使用最广泛的SFTP服务器OpenSSH也仅支持协议版本3,不支持行终止符转换。因此,在Jsch中放置标志并不是很有用。

关于java - 在Jsch中设置ASCII模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25791369/

10-10 22:30