博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
推荐一个java操作ftp的工具类
阅读量:6065 次
发布时间:2019-06-20

本文共 4302 字,大约阅读时间需要 14 分钟。

hot3.png

写在前面

作为经常使用电脑整理文件的童鞋,应该都使用过从ftp服务器上传下载文件,那么今天就了解下如何通过java程序操作ftp服务的文件

首先你要知道ftp的ip,路径,端口,有操作权限的账号和密码

1 导入jar包

commons-net-3.6.jar

这个jar包用来设置编码,经过测试,不加也可用

2 工具类中主要方法

2.1 登陆ftp

/**	 * 验证登录	 * @param ip	 * @param port	 * @param name	 * @param pwd	 * @return	 */	public boolean login(String ip,int port, String name, String pwd) {		try {			ftp = new FTPClient();			ftp.connect(ip, port);			System.out.println(ftp.login(name, pwd));			if(!ftp.login(name, pwd)){				return false;			}			ftp.setCharset(Charset.forName("UTF-8"));			ftp.setControlEncoding("UTF-8");		} catch (IOException e) {			e.printStackTrace();			return false;		}		return true;	}

注意:获取远程文件目录,上传和下载方法基于登陆方法

2.2 获取远程文件目录

/**	 * 获取ftp某一文件(路径)下的文件名字,用于查看文件列表	 * @param ip	 * @param port	 * @param name	 * @param pwd	 * @param remotedir 远程地址目录	 * @return	 */    public boolean getFilesName(String ip,int port, String name, String pwd, String remotedir) {        try {        	if(!login(ip, port, name, pwd)){				return false;			}            //获取ftp里面,指定文件夹 里面的文件名字,存入数组中            FTPFile[] files = ftp.listFiles(remotedir);            //打印出ftp里面,指定文件夹 里面的文件名字            for (int i = 0; i < files.length; i++) {                System.out.println(files[i].getName());            }        } catch (IOException e) {            e.printStackTrace();            return false;        }finally{        	this.close();        }        return true;    }

2.3 上传文件

/**     * 上传文件 方法一     * @param ip     * @param port     * @param name     * @param pwd     * @param remotepath 远程地址文件路径     * @param localpath 本地文件路径     * @return     */    public boolean putFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) {        try {        	if(!login(ip, port, name, pwd)){				return false;			}            //将本地的 localpath 文件上传到ftp的根目录文件夹下面,并重命名为 remotepath中的名字        	 return ftp.storeFile(remotepath, new FileInputStream(new File(localpath)));        } catch (IOException e) {            e.printStackTrace();            return false;        }finally{        	this.close();        }    }        /**     * 上传文件的第二种方法,优化了传输速度     * @param ip     * @param port     * @param name     * @param pwd     * @param remotepath 远程地址文件路径     * @param localpath 本地文件路径     * @return     */    public boolean putFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) {        try {        	if(!login(ip, port, name, pwd)){				return false;			}            os = ftp.storeFileStream(remotepath);            fis = new FileInputStream(new File(localpath));            byte[] b = new byte[1024];            int len = 0;            while ((len = fis.read(b)) != -1) {                os.write(b,0,len);            }        } catch (IOException e) {            e.printStackTrace();            return false;        }finally {        	this.close();		}        return true;    }

2.4 下载文件

/**     * 下载文件 方法一     * @param ip     * @param port     * @param name     * @param pwd     * @param remotepath 远程地址文件路径     * @param localpath 本地文件路径     * @return     */    public boolean getFileOne(String ip,int port, String name, String pwd,String remotepath,String localpath) {        try {        	if(!login(ip, port, name, pwd)){				return false;			}            //将ftp资源中 remotepath 文件下载到本地目录文件夹下面,并重命名为 localpath 中的名字        	return ftp.retrieveFile(remotepath, new FileOutputStream(new File(localpath)));        } catch (IOException e) {            e.printStackTrace();            return false;        }finally{        	this.close();        }    }	    /**     * 下载文件的第二种方法,优化了传输速度     * @param ip     * @param port     * @param name     * @param pwd     * @param remotepath 远程地址文件路径     * @param localpath  本地文件路径     * @return     */	public boolean getFileTwo(String ip,int port, String name, String pwd,String remotepath,String localpath) {		try {			if(!login(ip, port, name, pwd)){				return false;			}			is = ftp.retrieveFileStream(remotepath);			fos = new FileOutputStream(new File(localpath));			byte[] b = new byte[1024];			int len = 0;			while ((len = is.read(b)) != -1) {				fos.write(b,0,len);			}		} catch (IOException e) {			e.printStackTrace();			return false;		}finally {			this.close();		}		return true;	}

3 源码

当然上面代码只是重要的部分,如果有问题可去github自行下载

如果有什么更好的方法欢迎留言

转载于:https://my.oschina.net/charmsongo/blog/2982345

你可能感兴趣的文章
飞机大战
查看>>
浅谈微服务架构、容器技术与K8S
查看>>
网易笔试题
查看>>
vmmare安装之后,主机上没有VMnet1和VMnet8和虚拟机上外网连接设置
查看>>
MySQL----基础架构及运行原理
查看>>
线程同步的方法synchronized、ReentrantLock
查看>>
Android的Notification研究
查看>>
CentOS6.5安装和查看系统硬件信息
查看>>
hadoop2.5.2版本中的mapreduce要编译,需要引入哪个包呢?
查看>>
MySQL ProxySQL读写分离实践
查看>>
Dart与消息循环机制
查看>>
dubbo环境的搭建
查看>>
一周第三次课
查看>>
dd测试硬盘性能
查看>>
Django扩展——git&github
查看>>
挑战年薪20万Python web工程师
查看>>
APP自动化框架学习:读取配置文件,并判断定位方式
查看>>
限制某个目录禁止解析PHP、限制user_agent、PHP相关的配置
查看>>
python第十一天学习总结
查看>>
JAVA 内存管理总结:内存泄露、数据存储、垃圾回收机制一网打尽!
查看>>