【问题标题】:Setting ASCII mode in Jsch在 Jsch 中设置 ASCII 模式
【发布时间】: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"),反之亦然。

标签: java jsch


【解决方案1】:

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

您可以查看 SFTP 规范修订列表here。协议版本 3 的 RFC 是 here。请注意,使用最广泛的 SFTP 服务器 OpenSSH 也仅支持协议版本 3,不支持行终止符转换。所以在 Jsch 中使用 flag 不会很有用。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多