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
  • 7368

java读取FTP文件下载到本地

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

java实现通过FTP下载文件

 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File...
  • wyl_0728
  • wyl_0728
  • 2017年04月10日 16:52
  • 1968

JAVA代码实现FTP文件下载

JAVA实现FTP文件下载
  • smallerpig
  • smallerpig
  • 2016年03月24日 23:31
  • 6574

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

FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。FTP作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。FTP的目标是提高文件的共享...
  • u013761665
  • u013761665
  • 2015年11月12日 17:46
  • 32487

java 远程从FTP服务器下载文件到本地

package com.cassiatwig.liuliangqianbao.util; import org.apache.commons.net.ftp.FTPClient;  imp...
  • yyongsheng
  • yyongsheng
  • 2017年06月21日 10:40
  • 2656

ftp 实现文件的上传下载以及列出文件列表Java代码

public class FtpUtil { private  Log log = LogFactory.getLog(getClass()) ; private String userNam...
  • lzy1357986420
  • lzy1357986420
  • 2016年07月22日 01:12
  • 304

用Java实现FTP批量大文件上传下载(一)

本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量、大文件的上传下载控件。文章在比较了一系列FTP客户库的基础上,就其中一个比...
  • ycb1689
  • ycb1689
  • 2014年06月30日 11:24
  • 3077

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

Jdk1.7自带的FTP文件上传下载 Ftp相关的类库很多,这里以JDK自带的FTP上传下载功能为例。 Java代码   package com.boonya.upl...
  • yucaifu1989
  • yucaifu1989
  • 2016年05月23日 17:09
  • 5428

JavaFtp实例,实现文件下载和读取

  • 2010年11月08日 15:20
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中FTP下载文件
举报原因:
原因补充:

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