Java SFTP (apache vfs2) - 密码带有 @

Aye*_*let 5 java sftp apache-commons-vfs

我正在尝试使用 org.apache.commons.vfs2 通过 SFTP 下载文件。问题是,密码包含“@”字符,因此这会导致 URI 被错误解析:

org.apache.commons.vfs2.FileSystemException: Expecting / to follow the hostname in URI
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题?(显然我无法更改密码)。这是我正在使用的代码:

String sftpUri = "sftp://" + userName + ":" + password + "@"
        + remoteServerAddress + "/" + remoteDirectory + fileName;

String filepath = localDirectory + fileName;
File file = new File(filepath);
FileObject localFile = manager.resolveFile(file.getAbsolutePath());

FileObject remoteFile = manager.resolveFile(sftpUri, opts);
localFile.copyFrom(remoteFile, Selectors.SELECT_SELF);
Run Code Online (Sandbox Code Playgroud)

Ken*_*ter 6

使用实际的 URI 构造函数而不是手动创建自己的构造函数:

String userInfo = userName + ":" + password;
String path = remoteDirectory + filename;  // Need a '/' between them?
URI sftpUri = new URI("sftp", userInfo, remoteServerAddress, -1, path, null, null);
...
FileObject remoteFile = manager.resolveFile(sftpUri.toString(), opts);
Run Code Online (Sandbox Code Playgroud)