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