Apache Commons VFS -无法解析文件



VFS方法不能处理在jboss-beans.xml中配置的URI ${jboss.server.temp.dir}/local/outgoing,它被JBoss解析为"C:\Download\jboss-eap-5.1.1\server\default\tmp/local/outgoing"。当我尝试解析URI并获取文件时,它抛出了一个异常。知道是什么问题吗?

Exception

17:35:25,024 ERROR [VfsSynchronizerConfImpl] File FromOutgoing cannot be resolved, FileSystemException:
org.apache.commons.vfs2.FileSystemException: Could not find file with URI "C:Downloadjboss-eap-5.1.1serverdefaulttmp/local/outgoing" because it is a relative path, and no base URI was provided.
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:719)
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:649)
    at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:605)

DefaultFileSystemManager.class methods

public FileObject resolveFile(final String uri) throws FileSystemException
  -- this method calls the method below
public FileObject resolveFile(final FileObject baseFile, final String uri,
        final FileSystemOptions fileSystemOptions)
        throws FileSystemException
  -- this method cannot process the string and throws
     throw new FileSystemException("vfs.impl/find-rel-file.error", uri);

很老的问题,但很流行。这个例外非常普遍。对于我的情况,这个异常是在上传文件到远程ftp服务器时抛出的。根本原因是类路径中缺少sftp库。在此异常之前,vfs尝试使用与URI中提到的方案相对应的提供程序之一来解析文件。

在我的例子中,scheme是sftp,并且它试图在类路径上找到jsch库。由于它不存在于我的类路径中,因此抛出了此异常。因此,必须将提供程序jar放在类路径上。

@Manish Bansal -感谢您对这个问题的回复。我尝试了一切,但仍然得到同样的错误:异常在线程"main"filesystemexception:找不到文件的uri "sftp://....."因为它是一个相对路径,并且没有提供基uri。

在我的MAVEN项目中,我必须添加对'jsch' &它工作。

所以,简而言之,我添加了以下POM依赖:
<!-- SFTP -->
<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>   
    <version>0.1.55</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-vfs2</artifactId>
    <version>2.6.0</version>
</dependency>
public void downloadFile() throws IOException {     
    FileSystemManager manager = VFS.getManager();
            
    FileObject remote = manager.resolveFile(createConnectionString("XYZ.com","ABC","LMNOP","/<FOLDER_NAME>/<FILE_NAME>"));
    FileObject local = manager.resolveFile(System.getProperty("user.dir") + "/" + "src//main//resources//");
    
    local.copyFrom(remote, Selectors.SELECT_SELF);
 
    local.close();
    remote.close();
}
public static URI createConnectionString(String hostName, String username, String password, String remoteFilePath) {        
    URI sftpURI = null;
    try {
        String userInfo = username + ":" + password;
        
        sftpURI = new URI("sftp",userInfo,hostName,-1,remoteFilePath,null,null);
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    return sftpURI;
}

对于面临此问题的其他人:我通过替换

来消除此错误。
FileSystemManager fsManager = VFS.getManager();

StandardFileSystemManager fsManager = new StandardFileSystemManager();
fsManager.init();

这允许我多次使用文件系统管理器而不会再出现问题中描述的错误。用完后别忘了关闭fsManager:

fsManager.close();

只是试图补充已经提供的正确答案。
简而言之:检查VFS依赖表中使用的VFS特性。


我遇到了一个类似的问题,当我第一次尝试通过FTP连接(不是SFTP在原来的问题)。我使用Maven和IntelliJ IDEA。
我浏览了VFS官方文档,发现了以下内容:

  1. 一些VFS项目依赖项是可选的,默认不安装
  2. 什么可以需要安装在VFS下载&;构建页面。
    事实上,SFTP需要JSch, FTP需要Apache Commons Net,等等。

当我通过Maven安装Commons Net时,我的FTP连接已经开始工作了。

EDIT 2023:也就是说,添加你的pom.xml:

<!-- FTP -->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.9.0</version>
</dependency>

我认为它需要file: scheme,因为错误说它被认为是相对的

相关内容

  • 没有找到相关文章

最新更新