Файлы списков FTP-соединений URLConnection

URL url =  new URL("ftp://user:[email protected]/thefolder/");
URLConnection connection = url.openConnection();
...
// List files in folder...

Используя что-то вроде приведенного выше, мне было интересно, как я могу получить список файлов в папке «папка»?


Следуя этому первоначальному вопросу, я собрал это простое FTP-соединение, которое работает и выглядит хорошо. Он может видеть все файлы в папке /live/conf/ и копирует их все в локальную папку /conf/.

Единственная проблема в том, что файлы копируются, но контента нет. Все они 0 КБ и пусты.

Может ли кто-нибудь увидеть что-нибудь очевидное, что копирует имя файла, но не содержимое файла?

try {
    FTPClient ftp = new FTPClient();
    ftp.connect("000.000.000.000");
    ftp.login("USER", "PASSWORD");
    ftp.enterLocalPassiveMode();
    ftp.setFileType(FTP.BINARY_FILE_TYPE);

    FTPFile[] files = ftp.listFiles("/live/conf/");
    for (int i=0; i < files.length; i++) {
        if (files[i].getName().contains(".csv")) {

            String remoteFile1 = files[i].getName();
            File downloadFile1 = new File("/var/local/import/conf/"+files[i].getName());
            OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
            ftp.retrieveFile(remoteFile1, outputStream1);
            outputStream1.close();                  

        }
    }
    ftp.disconnect();
} catch (SocketException ex) {
    ex.printStackTrace();
} catch (IOException ex) {
    ex.printStackTrace();
}   

person KS1    schedule 07.01.2013    source источник
comment
Существуют специальные клиентские библиотеки FTP, вам лучше использовать это, это будет намного проще.   -  person fge    schedule 07.01.2013


Ответы (3)


Java SE URLConnection не подходит для получения списка файлы с FTP-узла. Что касается FTP, то он в основном поддерживает только команды FTP get или put (извлечение или загрузка файла). Он не поддерживает команду FTP ls (список файлов), которую вы в основном ищете, не говоря уже о многих других.

Вам нужно искать сторонние библиотеки, поддерживающие команду FTP ls (и многие другие). Обычно используется Apache Commons Net FtpClient. В его javadoc содержится продемонстрировал, как выдать ls:

FTPClient f = new FTPClient();
f.connect(server);
f.login(username, password);
FTPFile[] files = f.listFiles(directory);
person BalusC    schedule 07.01.2013

Вы можете использовать Общий FTP-клиент Apache

Это позволит вам вызывать listFiles с...

public static void main(String[] args) throws IOException {
        FTPClient client = new FTPClient();
        client.connect("c64.rulez.org");
        client.enterLocalPassiveMode();
        client.login("anonymous", "");
        FTPFile[] files = client.listFiles("/pub");
        for (FTPFile file : files) {
            System.out.println(file.getName());
        }
person david99world    schedule 07.01.2013
comment
Согласно BalusC - Круто, спасибо за это, быстро, просто, легко и работает! - person KS1; 08.01.2013

Проверьте этот класс, который я нашел. Это делает подъем для вас. Класс на nsftools.com

Примером может быть:

FTPConnection ftpConnect = new FTPConnection();
ftpConnect.connect("ftp.example.com");
ftpConnect.login("user","pass");

System.out.println(ftpConnect.listFiles());
person C Fairweather    schedule 07.01.2013