当前位置: 首页 > 面试题库 >

在Jsch中设置ASCII模式

史飞尘
2023-03-14
问题内容

我需要解决我目前遇到的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当前支持SFTP协议版本3,该协议未指定文本模式标志。

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



 类似资料:
  • 问题内容: 在Unix中,如何使用JSCH设置目录权限?我正在寻找drwxrwxrwx。Filezilla说,该整数是775,但JSCH没有正确设置权限。在JSCH设置权限之后,Filezilla表示它为407。 问题答案: Unix中的文件许可权代码(例如)是八进制的,而不是十进制的。如:当您执行类似的操作时,数字将被解释为八进制输入而不是十进制输入。 该系统来自以下事实:存在3个权限组: 所有

  • 设置 应用设置允许用户选择他们对应用行为的偏好。它们授予用户真实的控制感,并且避免用户被同样的问题反复打扰。 访问设置 由于用户并不需要经常使用设置,所以它们在 UI 中并不显眼。应用中访问设置时:在任何情况下,进入“设置”的按钮都应简单命名为“设置”。如果当前的页面支持左导航栏,那么把设置放在导航栏中除“帮助及反馈”外的所有按钮的下方。另外,如果当前页面里有工具栏,把设置放在工具栏的更多操作(a

  • 问题内容: 我正在编写一个使用android中的位置模拟可能性的应用程序。 我想实现的是模拟我的位置,而无需在开发人员选项中设置“允许模拟位置”标志。 我知道这是可能的,因为它可以与此应用一起使用: https //play.google.com/store/apps/details?id=com.lexa.fakegps&hl=zh- CN 我试过的 生成一个apk,将其移动到/ system

  • 我正在写一个应用程序,它利用了android中位置模拟的可能性。 我想要实现的是模拟我的位置,而不在开发者选项中设置“允许模拟位置”标志。 我知道这是可能的,因为是工程与此应用程序:https://play.google.com/store/apps/details?id=com.lexa.fakegps 我所尝试的: 生成一个apk,将其移动到/system/app,重新启动 ,我还尝试了使用和

  • 问题内容: 我遇到的情况是,卡实体具有某个人的外键。 此人的默认获取类型为LAZY。我可以在查询中为EAGER指定获取类型: 谢谢你的帮助。 问题答案: 你试过了吗 对于QueryDSL 4.0.2+

  • 我们从应用程序中的avro文件中读取时间戳信息。我正在测试从Spark2.3.1到Spark2.4的升级,其中包括新内置的spark-avro集成。但是,我不知道如何告诉avro模式,我希望时间戳具有“timestamp-millis”的逻辑类型,而不是缺省的“timestamp-micros”。 正如我们所看到的,底层类型仍然是long,但它现在被一个逻辑类型“timestamp-micros”