1

JSCHを使用してFTPサーバーからすべてのファイルをダウンロードしたい。

以下はコードスニペットです。

        List<File> fileList = null;
        Vector<ChannelSftp.LsEntry> list = sftpChannel.ls(remoteFolder);
        for (ChannelSftp.LsEntry file : list) {

            if( getLog().isDebugEnabled() ){
                getLog().debug("Retrieved Files  from the folder  is"+file);
            }

            if (!(new File(file.getFilename())).isFile()) {
                continue;
            }
       fileList.add(new File(remoteFolder,file.getFilename())) ;
       return fileList; 

このメソッドは、別のメソッドが sftpChannel.get(src,dest) を使用してリモート サーバーからファイルをダウンロードするための List を返します。

コードが大丈夫かどうか教えてください。試す環境がないので、確認できません。しかし、私が FTPClient 用に書いた似たようなコードは動作します。

あなたの助けに感謝。

4

1 に答える 1

0

SftpATTRS を使用してファイル情報を取得できます。ファイル情報を格納するラッパー クラスを宣言できます。以下に例を示します。

    private class SFTPFile
{
    private SftpATTRS sftpAttributes;

    public SFTPFile(LsEntry lsEntry)
    {
        this.sftpAttributes = lsEntry.getAttrs();
    }

    public boolean isFile()
    {
        return (!sftpAttributes.isDir() && !sftpAttributes.isLink());
    }
}

このクラスを使用して、LsEntry がファイルかどうかをテストできます。

    private List<SFTPFile> getFiles(String path)
{
    List<SFTPFile> files = null;
    try
    {
        List<?> lsEntries = sftpChannel.ls(path);
        if (lsEntries != null)
        {
            files = new ArrayList<SFTPFile>();
            for (int i = 0; i < lsEntries.size(); i++)
            {
                Object next = lsEntries.get(i);
                if (!(next instanceof LsEntry))
                {
                    // throw exception
                }
                SFTPFile sftpFile = new SFTPFile((LsEntry) next);
                if (sftpFile.isFile())
                {
                    files.add(sftpFile);
                }
            }
        }
    }
    catch (SftpException sftpException)
    {
        //
    }
    return files;
}

sftpChannel.get(src,dest) を使用できるようになりました。ファイルをダウンロードします。

于 2013-02-19T10:48:26.647 に答える