java操作ftp

ftp操作工具类

package com.ftp;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.InetSocketAddress;  
import java.net.SocketAddress;  
import sun.net.ftp.FtpClient;  
import sun.net.ftp.FtpProtocolException;  
public class FTPUtil {  
    /** 
     * 连接ftp服务器 JDK 1.7 
     *  
     * @param url 
     * @param port 
     * @param username 
     * @param password 
     * @return FtpClient 
     * @throws FtpProtocolException 
     * @throws IOException 
     */  
    public static FtpClient connectFTP(String url, int port, String username, String password) { // 创建ftp  
        FtpClient ftp = null;  
        try {  
            // 创建地址  
            SocketAddress addr = new InetSocketAddress(url, port);  
            // 连接  
            ftp = FtpClient.create();  
            ftp.connect(addr);  
            // 登陆  
            ftp.login(username, password.toCharArray());  
            ftp.setBinaryType();  
            System.out.println(ftp.getWelcomeMsg());  
        } catch (FtpProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        return ftp;  
    }  
    /** 
     * 切换目录 
     *  
     * @param ftp 
     * @param path 
     */  
    public static void changeDirectory(FtpClient ftp, String path) {  
        try {  
            ftp.changeDirectory(path);  
            System.out.println(ftp.getWorkingDirectory());  
        } catch (FtpProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
    /** 
     * 关闭ftp 
     *  
     * @param ftp 
     */  
    public static void disconnectFTP(FtpClient ftp) {  
        try {  
            ftp.close();  
            System.out.println("disconnect success!!");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
    /** 
     * 上传文件 
     *  
     * @param localFile 
     * @param ftpFile 
     * @param ftp 
     */  
    public static void upload(String localFile, String ftpFile, FtpClient ftp) {  
        OutputStream os = null;  
        FileInputStream fis = null;  
        try {  
            // 将ftp文件加入输出流中。输出到ftp上  
            os = ftp.putFileStream(ftpFile);  
            File file = new File(localFile);  
            // 创建一个缓冲区  
            fis = new FileInputStream(file);  
            byte[] bytes = new byte[1024];  
            int c;  
            while ((c = fis.read(bytes)) != -1) {  
                os.write(bytes, 0, c);  
            }  
            System.out.println("upload success!!");  
        } catch (FtpProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } finally {  
            try {  
                if (os != null)  
                    os.close();  
                if (fis != null)  
                    fis.close();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
    /** 
     * 文件下载 
     *  
     * @param localFile 
     * @param ftpFile 
     * @param ftp 
     */  
    public static void download(String localFile, String ftpFile, FtpClient ftp) {  
        InputStream is = null;  
        FileOutputStream fos = null;  
        try {  
            // 获取ftp上的文件  
            is = ftp.getFileStream(ftpFile);  
            File file = new File(localFile);  
            byte[] bytes = new byte[1024];  
            int i;  
            fos = new FileOutputStream(file);  
            while ((i = is.read(bytes)) != -1) {  
                fos.write(bytes, 0, i);  
            }  
            System.out.println("download success!!");  
        } catch (FtpProtocolException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } finally {  
            try {  
                if (fos != null)  
                    fos.close();  
                if (is != null) {  
                    is.close();  
                }  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
}  

测试代码

package com.testCode;  
import java.net.InetAddress;  
import java.net.UnknownHostException;  
import sun.net.ftp.FtpClient;  
import com.ftp.FTPUtil;  
public class Test2 {  
    public static void main(String[] args) {  
        try {  
            InetAddress addr = InetAddress.getLocalHost();  
            System.out.println(addr.getHostAddress());  
        } catch (UnknownHostException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
        String ip = "10.10.10.10";  
        int port = 21;  
        String username = "root";  
        String password = "root";  
        String path = "/home";  
        // 连接ftp  
        FtpClient ftp = FTPUtil.connectFTP(ip, port, username, password);  
        System.out.println(ftp.getWelcomeMsg());  
        // 切换目录  
        FTPUtil.changeDirectory(ftp, path);  
        System.out.println("-----上传----");  
        FTPUtil.upload("D:\\aaa.txt", "/home/aaa.txt", ftp);  
        System.out.println("-----下载----");  
        FTPUtil.download("D:\\aaa.txt", "/home/aaa.txt", ftp);  
    }  
}  

原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-03-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ml

Redis学习笔记二

  学习Redis添加Object时,由于Redis只能存取字符串String,对于其它数据类型形容:Int,long,double,Date等不提供支持,因而...

3379
来自专栏Hongten

python开发_calendar

如果你用过linux,你可能知道在linux下面的有一个强大的calendar功能,即日历

1322
来自专栏码匠的流水账

聊聊spring cloud gateway的GatewayFilter

本文主要研究一下spring cloud gateway的GatewayFilter

5631
来自专栏xdecode

利用Cglib实现AOP

前文讲了, 可以利用Spring, Guice等框架提供的容器实现AOP, 如果想绕过容器, 直接注入Class, 可以利用Cglib为对象加上动态代理,实现代...

2407
来自专栏Java编程

20个非常有用的Java程序片段

下面是20个非常有用的Java程序片段,希望能对你有用。

7682
来自专栏LhWorld哥陪你聊算法

Hadoop源码篇--Reduce篇

Reduce文件会从Mapper任务中拉取很多小文件,小文件内部有序,但是整体是没序的,Reduce会合并小文件,然后套个归并算法,变成一个整体有序的文件。

2711
来自专栏编舟记

命令式到函数式编程

应用场景:当我们用到 if-elseif-else 的时候,可以考虑使用 Optional 语义。 举例说明:

782
来自专栏xdecode

PDFBox 打印带背景的文件速度慢

打印慢的原因 java的RasterPrinterJob会执行很多次printPage方法 他应该是按块填充的, 如果页面元素非常复杂, 那么printPage...

4257
来自专栏吴生的专栏

spring boot 源码解析-SpringApplication初始化

就是这么简单的代码,构成了spring boot的世界. 那么代码中只有⼀个@SpringBootApplication 注解 和 调⽤了SpringAppli...

4595
来自专栏码匠的流水账

聊聊sentinel的AuthoritySlot

com/alibaba/csp/sentinel/slots/block/authority/AuthoritySlot.java

1291

扫码关注云+社区

领取腾讯云代金券