3

FTPでApacheCommonsVFSを使用しようとしています。私のFTPでは、ファイルとフォルダーの次の構造があります。

/
/test
/test/in
/test/in/file1.txt
/test/in/file2.txt

/ test / inフォルダーからすべてのファイルを接続して読み取る必要があります(常に変更されます)。コード:

        FileSystemManager fsManager = null;
        FileSystem fs = null;
        FileSystemOptions opts = new FileSystemOptions();
        fsManager = VFS.getManager();

        FileObject path = fsManager.resolveFile("ftp://user:password@my.ftp.host/test/in/", opts);

        fs = path.getFileSystem();

        //prints Connection successfully established to /test/in
        System.out.println("Connection successfully established to " + path.getName().getPath());

しかし、/ test / inが存在しないと表示されているため、ファイルリストを取得できませんでした。は、ファイルタイプをチェックするためにいくつかのテストを行いました:System.out.println(path.getType());異なるパスを使用します。結果:

ftp:// user:password@my.ftp.host/test-ファイル

ftp:// user:password@my.ftp.host/test/in-架空

ftp:// user:password@my.ftp.host/test/in/file1.txt-ファイル

FileType.IMAGINARYは、ファイルが存在しないことを意味します。FTPフォルダを操作する方法について何かアイデアはありますか?

4

2 に答える 2

5

ftpに「パッシブ」モードを設定するだけです。

FtpFileSystemConfigBuilder.getInstance().setPassiveMode(opts, true);
于 2011-05-18T15:35:54.947 に答える
0

同様の問題があり、パッシブモードを設定するだけでは解決しませんでした。

解決する必要のあるフォルダは/FTP_HOME/ data/xxxxでした

私はvfs2DefaultFileMonitorを使用してフォルダーを監視していて、何の役にも立たないようにリッスンしていましFileChangeEventた。

FileObject listendir =  fsManager.resolveFile("ftp://"+username+":"+password+"@"+server+"/data/" + "xxxx/",opts);

もう少し深く掘り下げると、' FileObjects が返され、アクセスできないことを意味します。のソースを見ると、ディレクトリを決定するのはこれらのチェックに依存していました(チェック)。isReadable()exists()falseFileObjectAbstractFileObjectAbstractFileObject getParent()

問題は AbstractFileObject 、ユーザーディレクトリをルートとして使用するように明示的に設定されていない限り、ファイルシステムのルートに関連するファイルを確認することでした。そのため、渡されたファイルパスが欠落しています。したがって、解決策は、FtpFileSystemConfigBuilderユーザーディレクトリをルートと見なすように指示を設定することでした。

FtpFileSystemConfigBuilder.getInstance( ).setUserDirIsRoot(opts,true);
于 2013-05-03T11:37:21.920 に答える