SFTP Читать все файлы в каталоге

Я создал успешное соединение с помощью SFTP com.jcraft.jsch

Я также создал папку каталога под HostDir, например: channelSftp.mkdir("sftp.test");

Теперь я хочу прочитать все имена файлов/папок в каталоге хоста, я не вижу подходящего метода или примера.

Спасибо


person Sarz    schedule 08.07.2014    source источник


Ответы (2)


Сделал с помощью этого..

ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(hostDir);
Vector<String> files = sftp.ls("*");
for (int i = 0; i < files.size(); i++)
{
    Object obj = files.elementAt(i);
    if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry)
    {
        LsEntry entry = (LsEntry) obj;
        if (true && !entry.getAttrs().isDir())
        {
            ret.add(entry.getFilename());
        }
        if (true && entry.getAttrs().isDir())
        {
            if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
            {
                ret.add(entry.getFilename());
            }
        }
    }
}
System.out.println(ret);
person Sarz    schedule 08.07.2014

Хотя принятый ответ работает, код слишком сложен и имеет ряд проблем, основной из которых является приведение от String к LsEntry.

Это более простое решение без непонятных отливок:

List<String> list = new ArrayList<>();

ChannelSftp sftp = (ChannelSftp) channel;
Vector<LsEntry> files = sftp.ls(path);
for (LsEntry entry : files)
{
    if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
    {
        list.add(entry.getFilename());
    }
}

System.out.println(list);

Если вы хотите рекурсивно перечислить файлы (включая файлы в подкаталогах), см.:
Полная иерархия каталогов на SFTP-сервере с использованием JSch на Java

person Martin Prikryl    schedule 05.04.2018