java中FTP下载文件

原创 2012年03月28日 11:34:42

一、下载所需要的jar包

http://commons.apache.org/net/download_net.cgi

二、编码实现

这里没有用到filter,如果用filter就可以过滤想要的文件。

public class Ftp {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Ftp ftp = new Ftp();
        String hostname = "www.strawberry.com";
        Integer port = 21;
        String username = "username";
        String password = "password";
        String remote = "/c.txt";
        String local = "/home/tin/LeonChen/FTP/";
        try {
            ftp.connect(hostname, port, username, password);
            System.out.println("接收状态:"+ftp.download(remote, local));
            ftp.disconnect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private FTPClient ftpClient = new FTPClient();

    /*
     * * 连接到FTP服务器  
     * * @param hostname 主机名  
     * * @param port 端口  
     * * @param username 用户名  
     * * @param password 密码  
     * * @return 是否连接成功
     * * @throws IOException
     */
    private boolean connect(String hostname, int port, String username,
            String password) throws IOException {
        ftpClient.connect(hostname, port);
        ftpClient.setControlEncoding("UTF-8");
        if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
            if (ftpClient.login(username, password)) {
                return true;
            }
        }
        disconnect();
        return false;
    }

    /*
     * 从FTP服务器上下载文件,支持断点续传,上传百分比汇报
     *
     * @param remote 远程文件路径
     *
     * @param local 本地文件路径
     *
     * @return 上传的状态
     *
     * @throws IOException
     */
    public DownloadStatus download(String remote, String local)
            throws IOException {
        // 设置被动模式
        ftpClient.enterLocalPassiveMode();
        // 设置以二进制方式传输
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        DownloadStatus result;
        // 检查远程文件是否存在
        FTPFile[] files = ftpClient.listFiles(new String(remote
                .getBytes("UTF-8"), "iso-8859-1"));
        if (files.length != 1) {
            System.out.println("远程文件不存在");
            return DownloadStatus.Remote_File_Noexist;
        }
        long lRemoteSize = files[0].getSize();
        String fildName = files[0].getName();
        // 本地存在文件,进行断点下载
        File f = new File(local+fildName);
        if (f.exists()) {
            long localSize = f.length();
            if (localSize >= lRemoteSize) {
                System.out.println("本地文件大于远程文件,下载中止");
                return DownloadStatus.Local_Bigger_Remote;
            }

            // 进行断点续传,并记录状态
            FileOutputStream out = new FileOutputStream(f, true);
            ftpClient.setRestartOffset(localSize);
            InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1"));
            byte[] bytes = new byte[1024];
            long step = lRemoteSize / 100;
            long process = localSize / step;
            int c;
            while ((c = in.read(bytes)) != -1) {
                out.write(bytes, 0, c);
                localSize += c;
                long nowProcess = localSize / step;
                if (nowProcess > process) {
                    process = nowProcess;
                    if (process % 10 == 0)
                        System.out.println("下载进度:" + process);
                    // TODO 更新文件下载进度,值存放在process变量中
                }
            }
            in.close();
            out.close();
            boolean isDo = ftpClient.completePendingCommand();
            if (isDo) {
                result = DownloadStatus.Download_From_Break_Success;
            } else {
                result = DownloadStatus.Download_From_Break_Failed;
            }
        } else {
            OutputStream out = new FileOutputStream(f);
            InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1"));
            byte[] bytes = new byte[1024];
            long step = lRemoteSize / 100;
            long process = 0;
            long localSize = 0L;
            int c;
            while ((c = in.read(bytes)) != -1) {
                out.write(bytes, 0, c);
                localSize += c;
                long nowProcess = localSize / step;
                if (nowProcess > process) {
                    process = nowProcess;
                    if (process % 10 == 0)
                        System.out.println("下载进度:" + process);
                    // TODO 更新文件下载进度,值存放在process变量中
                }
            }
            in.close();
            out.close();
            boolean upNewStatus = ftpClient.completePendingCommand();
            if (upNewStatus) {
                result = DownloadStatus.Download_New_Success;
            } else {
                result = DownloadStatus.Download_New_Failed;
            }
        }
        return result;
    }

    private void disconnect() throws IOException {
        if (ftpClient.isConnected()) {
            ftpClient.disconnect();
        }
    }

}



Java代码实现FTP文件下载

一、下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中 二、编写工具类FtpUtil.Java如下 [java] view ...
  • btt2013
  • btt2013
  • 2016年10月23日 16:45
  • 5082

java读取FTP文件下载到本地

最近公司业务需要,研究了一下ftp的功能,发现还是比较实用的。ftp相当于是自己建一个网盘,然后创建用户,为用户提供上传下载功能。特别是多平台得数据交互,优势还是蛮大的。有兴趣的可以研究一下,限于篇幅...

Jdk1.7自带的FTP文件上传下载

Jdk1.7自带的FTP文件上传下载 Ftp相关的类库很多,这里以JDK自带的FTP上传下载功能为例。 Java代码   package com.boonya.upl...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java实现通过FTP下载文件

 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File...

java操作ftp实现文件的上传下载(适用于图片文档服务器)

package com.taotao.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileN...

JAVA代码实现FTP文件下载

JAVA实现FTP文件下载

Java连接FTP服务器并且实现对其文件的上传和下载

FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

java从ftp服务器上传下载文件

原文链接 目录(?)[+] 概述   FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。FTP作为网络共享文件的传输协议,在网络...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中FTP下载文件
举报原因:
原因补充:

(最多只允许输入30个字)