在Jsch中设置ASCII模式

我需要克服我目前正在使用的Unix-Windows文件格式(LF到CRLF)问题。 我使用的ftp客户端是Jcraft的Jsch。

虽然我遇到了可以设置的标志,但在线文档非常简单

SSH_FXF_TEXT_MODE 

启用ASCII模式,但我没有看到我应该在代码本身设置这个,我也没有在这些Javadocs中看到它

以下是我自己尝试的解决方法。 “Newly Added”行显示我如何获取文件并将其转换为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()); 

请注意,为了清楚了解代码段,我省略了exception处理和其他做法。

这种解决方法是否会成功,或者Jsch看似默认的二进制模式是否会覆盖ASCII编码的字符串并像往常一样进行传输?

我会测试它,我只是想知道你是否有人能直接告诉我? 或者确实知道如何/在哪里设置Text_Mode标志! 🙂

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

文本模式标志已添加到SFTP协议版本4.Jsch当前支持SFTP协议版本3 ,它不指定文本模式标志。

您可以在此处查看SFTP规范修订列表。 协议版本3的RFC 在这里 。 请注意,最广泛使用的SFTP服务器OpenSSH也仅支持协议版本3,并且不支持行终止符转换。 所以在Jsch中拥有旗帜可能不是很有用。