【问题标题】:URLConnection FTP list filesURLConnection FTP 列表文件
【发布时间】:2012-12-21 10:15:48
【问题描述】:
URL url =  new URL("ftp://user:pass@ftp.example.com/thefolder/");
URLConnection connection = url.openConnection();
...
// List files in folder...

使用类似上面的方法,我想知道如何获取文件夹“thefolder”中的文件列表?


从这个原始问题开始,我整理了这个简单的 FTP 连接,它一切正常且看起来不错。它可以看到 /live/conf/ 位置的所有文件,并将它们全部复制到本地 /conf/ 位置。

唯一的问题是,它正在复制文件但没有内容。它们都是 0KB 并且是空的。

任何人都可以看到任何明显的复制文件名而不是文件内容的内容吗?

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();
}   

【问题讨论】:

  • 有专门的FTP客户端库,你最好用这个,方便很多。

标签: java file ftp urlconnection


【解决方案1】:

Java SE URLConnection 不适合从 FTP 主机检索文件列表的工作。至于FTP,它基本上只支持FTPgetput命令(检索或上传文件)。它不支持您基本上正在寻找的 FTP ls 命令(列出文件),更不用说其他许多命令了。

您需要寻找支持 FTP ls 命令(以及更多)的第 3 方库。一个常用的是Apache Commons NetFtpClient。在其javadoc 中演示了如何发出ls

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

【讨论】:

    【解决方案2】:

    你可以使用Apache commons FTPClient

    这将允许您调用 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());
            }
    

    【讨论】:

    • 按照 BalusC - 酷,为此欢呼,快速、简单、简单且有效!
    【解决方案3】:

    看看我找到的这个课程。它为你做起重。 Class at nsftools.com

    例如:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多