使用Java从WEB FTP下载文件时出现问题?

时间:2017-04-23 05:22:20

标签: java apache ftp

使用Apache Commons Net从Web Ftp通过Java程序下载文件时遇到问题。

假设我要下载此文件: webftp.vancouver.ca/opendata/bike_rack/BikeRackData.csv 这不是您可以通过HTTP请求下载的文件。我可以用我的浏览器来做,因为我正在使用FTP插件。

从FTP服务器检索文件的传统方式似乎不适用于特定类型( Web FTP )。我可以建立连接,但文件检索不起作用,因为文件是空的。

我使用的代码(使用Apache Commons检索文件的经典方法)如下:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory;

public class FTPDownload {

        final private FTPClient ftp = new FTPClient();
        private String input;
        private String server;
        private String path;
        private String destination;
        private String fileName;

    public FTPDownload(String input, String destination) {
            this.input = input;
            this.destination = destination;
            if (input != null && input.contains("/")) {
                    String[] elts = input.split("/");
                    server = elts[0];
                    fileName = elts[elts.length - 1];
                    path = input.substring(server.length() - 1);
            } else {
                    server = input;
                    path = null;
            }
    }

    public FTPDownload(String server, String path, String destination) {
            this.server = server;
            this.path = path;
            this.destination = destination;
            if (path != null && path.contains("/")) {
                    String[] elts = path.split("/");
                    fileName = elts[elts.length - 1];
            }
    }

    public boolean retrieveFile() throws IOException {
            boolean error = false;
            ftp.connect(server);
            int reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                    ftp.disconnect();
                    return false;
            }
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            ftp.enterRemotePassiveMode();
            File download = new File(destination + "/" + fileName);
            OutputStream outputStream;
            outputStream = new FileOutputStream(download);
            ftp.changeWorkingDirectory(path.substring(0, path.length() - fileName.length()));
            ftp.setParserFactory(new DefaultFTPFileEntryParserFactory());
            String[] list = ftp.listNames();
            ftp.retrieveFile(fileName, outputStream);
            outputStream.close();
            ftp.logout();
            return error;
    }

    public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
            FTPDownload myFtp = new FTPDownload("webftp.vancouver.ca", "/opendata/bike_rack/BikeRackData.csv", "E:\\test");
            myFtp.retrieveFile();

    }

}

希望问题是可以理解的。 谢谢。

0 个答案:

没有答案