在Jsch中设置ASCII模式

问题描述 投票:3回答:1

我需要克服一个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。

java jsch
1个回答
4
投票

文本模式标志被添加到SFTP协议版本4。Jsch目前支持SFTP协议版本3,它没有指定文本模式标志。

你可以查看SFTP规范的修订列表。此处. 协议版本3的RFC是 此处. 需要注意的是,最广泛使用的SFTP服务器OpenSSH也只支持协议版本3,而且不支持行结束符转换。所以在Jsch中加入这个标志就不是很有用了。

© www.soinside.com 2019 - 2024. All rights reserved.