6

VFSメソッドは、JBossによって解決される${jboss.server.temp.dir}/local/outgoing構成済みのこのURIを処理できません。URIを解決してファイルを取得しようとすると、例外がスローされます。問題となる可能性のあるアイデアはありますか?jboss-beans.xml"C:\\Download\\jboss-eap-5.1.1\\server\\default\\tmp/local/outgoing"

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:\Download\jboss-eap-5.1.1\server\default\tmp/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);
4

5 に答える 5

11

かなり古い質問ですが、人気があります。この例外は非常に一般的です。私の場合、この例外は、リモートftpサーバーにファイルをアップロードしているときにスローされました。そして根本的な原因は、クラスパスにsftpライブラリがないことでした。この例外の直前に、vfsで説明されているスキームに対応するプロバイダーの1つを使用してファイルを解決しようとしますURI

私の場合、schemeはsftpandであり、jschクラスパスでライブラリを見つけようとしました。クラスパスに存在しなかったため、この例外がスローされました。したがって、プロバイダーjarをクラスパスに保持する必要があります。

于 2020-06-13T11:23:43.183 に答える
7

この問題に直面している他の人々のために:私は置き換えることによってこのエラーを取り除きました

FileSystemManager fsManager = VFS.getManager();

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

これにより、質問で説明されているエラーが発生することなく、ファイルシステムマネージャーを複数回使用できるようになりました。あなたがそれを終えたらあなたを閉じることを忘れないでくださいfsManager

fsManager.close();
于 2013-08-09T18:08:34.793 に答える
6

@ManishBansal-この問題についてご返信いただきありがとうございます。すべてを試しましたが、それでも同じエラーが発生しました:スレッド "main"の例外org.apache.commons.vfs2.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;
    }
于 2020-08-12T20:23:42.193 に答える
1

エラーは相対的であると想定されているため、file:schemeが必要だと思います。

于 2011-11-05T01:33:09.453 に答える
0

すでに提供されている正解を補完しようとするだけです。
つまり、使用するVFS機能についてVFS依存関係テーブルを確認してください。


最初に接続しようとしたときに同様の問題が発生しましたFTP元の質問のようにSFTPではありません)。IntelliJIDEAでMavenを使用しています。VFSの公式ドキュメント
を調べたところ、次のことがわかりました。

  1. 一部のVFSプロジェクトの依存関係はオプションであり、デフォルトではインストールされません
  2. インストールする必要があるのは、VFSのダウンロードとビルドページの表にあります。
    確かに、JSchに必要ですSFTPApache Commons Netに必要ですFTP、など。

Commons NetMaven経由でインストールするとすぐにFTP接続が機能し始めました。

于 2022-01-02T22:58:31.833 に答える