Java SFTP无法处理名为包含星号的文件

Java SFTP无法处理名为包含星号的文件,java,sftp,Java,Sftp,我有一个关于SFTP的问题。 我已经将sftp用于文件传输功能(在java调度程序中)。 该程序将使用sftp将文件从一个位置传输到另一个远程位置。 除名为包含星号的文件外,所有文件都已成功传输。 星号在sftp中被视为通配符。 但是,有没有一种方法可以配置sftp,使其接受*并传输名为包含星号的文件 任何帮助都是值得的 注意: 我使用了com.zehon.sftp.sftpAPI作为sftp客户端。 我使用了此api中的以下方法: public static int sendFile(java

我有一个关于SFTP的问题。 我已经将sftp用于文件传输功能(在java调度程序中)。 该程序将使用sftp将文件从一个位置传输到另一个远程位置。 除名为包含星号的文件外,所有文件都已成功传输。 星号在sftp中被视为通配符。 但是,有没有一种方法可以配置sftp,使其接受*并传输名为包含星号的文件

任何帮助都是值得的

注意: 我使用了
com.zehon.sftp.sftp
API作为sftp客户端。 我使用了此api中的以下方法:

public static int sendFile(java.lang.String localFilePath,
                           java.lang.String sftpDestFolder,
                           java.lang.String serverName,
                           java.lang.String username,
                           java.lang.String password)
                    throws FileTransferException
谢谢
封送

您需要用反斜杠转义文件名,以使其不会将星号解释为通配符;e、 g

String oldstring = "file*name";
String escaped = oldstring.replace("*", "\\*");
然后使用
escaped
而不是
oldstring
。大多数jsch ftp代码都提到了操作的globbing,因此在使用代码时必须注意这一点。

该函数的函数没有提到任何关于使用通配符的内容。你应该考虑把这个问题作为一个bug报告(至少是文档错误)。 同时,您可以通过自己打开源文件并使用接受inputStream的
sendFile()
函数来解决此问题:

try (FileInputStream fis = new FileInputStream(theLocalFile)) {
    SFTP.SendFile(fis, theRemoteName, theRemoteDir,
                  theRemoteServer, theRemoteUer, theRemotePass);
}

您没有指定正在使用的sftp程序/库。这不是特定于协议的,而是特定于sftp客户端的。@MartinPrikryl-很抱歉,我错过了它。我已编辑了我的问题并将其添加为注释。请参考它,让我知道你的建议。有什么解决方案吗?Zehon不是开源的,它的文档也不包括这一点。你考虑使用JSCH吗?(Zehon只是Jsch顶部的另一层)。另外,使用
*
上载文件时,实际会发生什么情况?它是如何失败的?您确定目标服务器允许使用
*
的文件吗?请注意,例如,您不能在Windows上使用
*
创建文件。@Martin感谢您宝贵的更新和建议。我们决定不在文件名中添加星号,从而解决了这个问题。事实上,我忘了提到我们在Apple MAC机器上运行应用程序,在那里我们可以创建包含
*
的文件。无论如何,谢谢你。