博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java通过ftp上传、下载文件,遍历文件目录
阅读量:6588 次
发布时间:2019-06-24

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

hot3.png

import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.catalina.tribes.util.Logs;import sun.net.TelnetInputStream;import sun.net.TelnetOutputStream;import sun.net.ftp.FtpClient;public class DownFileForFtp {	FtpClient ftpClient;	private String server = "ip";	private int port = 21;	private String userName = "usn";	private String userPassword = "pwd";	/**	 * 链接到服务器	 * 	 * @return	 */	public boolean open() {		if (ftpClient != null && ftpClient.serverIsOpen())			return true;		try {			ftpClient = new FtpClient();			ftpClient.openServer(server, port);			ftpClient.login(userName, userPassword);			ftpClient.binary();			return true;		} catch (Exception e) {			e.printStackTrace();			ftpClient = null;			return false;		}	}	public boolean cd(String dir) {		boolean f = false;		try {			ftpClient.cd(dir);		} catch (IOException e) {			//Logs.error(e.toString());			return f;		}		return true;	}	/**	 * 上传文件到FTP服务器	 * 	 * @param localPathAndFileName	 *            本地文件目录和文件名	 * @param ftpFileName	 *            上传后的文件名	 * @param ftpDirectory	 *            FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录	 * @throws Exception	 */	public boolean upload(String localDirectoryAndFileName, String ftpFileName,			String ftpDirectory) throws Exception {		if (!open())			return false;		FileInputStream is = null;		TelnetOutputStream os = null;		try {			char ch = ' ';			if (ftpDirectory.length() > 0)				ch = ftpDirectory.charAt(ftpDirectory.length() - 1);			for (; ch == '/' || ch == '\\'; ch = ftpDirectory					.charAt(ftpDirectory.length() - 1))				ftpDirectory = ftpDirectory.substring(0,						ftpDirectory.length() - 1);			int slashIndex = ftpDirectory.indexOf(47);			int backslashIndex = ftpDirectory.indexOf(92);			int index = slashIndex;			String dirall = ftpDirectory;			if (backslashIndex != -1 && (index == -1 || index > backslashIndex))				index = backslashIndex;			String directory = "";			while (index != -1) {				if (index > 0) {					String dir = dirall.substring(0, index);					directory = directory + "/" + dir;					ftpClient.sendServer("XMKD " + directory + "\r\n");					ftpClient.readServerResponse();				}				dirall = dirall.substring(index + 1);				slashIndex = dirall.indexOf(47);				backslashIndex = dirall.indexOf(92);				index = slashIndex;				if (backslashIndex != -1						&& (index == -1 || index > backslashIndex))					index = backslashIndex;			}			ftpClient.sendServer("XMKD " + ftpDirectory + "\r\n");			ftpClient.readServerResponse();			os = ftpClient.put(ftpDirectory + "/" + ftpFileName);			File file_in = new File(localDirectoryAndFileName);			is = new FileInputStream(file_in);			byte bytes[] = new byte[1024];			int i;			while ((i = is.read(bytes)) != -1)				os.write(bytes, 0, i);			// 清理垃圾			return true;		} catch (Exception e) {			e.printStackTrace();			return false;		} finally {			if (is != null)				is.close();			if (os != null)				os.close();		}	}	/**	 * 从FTP服务器上下载文件并返回下载文件长度	 * 	 * @param ftpDirectoryAndFileName	 * @param localDirectoryAndFileName	 * @return	 * @throws Exception	 */	public long download(String ftpDirectoryAndFileName,			String localDirectoryAndFileName) throws Exception {		long result = 0;		if (!open())			return result;		TelnetInputStream is = null;		FileOutputStream os = null;		try {			is = ftpClient.get(ftpDirectoryAndFileName);			java.io.File outfile = new java.io.File(localDirectoryAndFileName);			os = new FileOutputStream(outfile);			byte[] bytes = new byte[1024];			int c;			while ((c = is.read(bytes)) != -1) {				os.write(bytes, 0, c);				result = result + c;			}		} catch (Exception e) {			throw e;		} finally {			if (is != null)				is.close();			if (os != null)				os.close();		}		return result;	}	/**	 * 返回FTP目录下的文件列表	 * 	 * @param ftpDirectory	 * @return	 */	public List
getFileNameList(String ftpDirectory) { List
list = new ArrayList
(); if (!open()) return list; try { DataInputStream dis = new DataInputStream( ftpClient.nameList(ftpDirectory)); String filename = ""; while ((filename = dis.readLine()) != null) { list.add(filename); System.out.println(filename); } } catch (Exception e) { e.printStackTrace(); } return list; } /** * 删除FTP上的文件 * * @param ftpDirAndFileName */ public boolean deleteFile(String ftpDirAndFileName) { if (!open()) return false; ftpClient.sendServer("DELE " + ftpDirAndFileName + "\r\n"); return true; } /** * 删除FTP目录 * * @param ftpDirectory */ public boolean deleteDirectory(String ftpDirectory) { if (!open()) return false; ftpClient.sendServer("XRMD " + ftpDirectory + "\r\n"); return true; } /** * 关闭链接 */ public void close() { try { if (ftpClient != null && ftpClient.serverIsOpen()) ftpClient.closeServer(); } catch (Exception e) { } } public static void main(String []args) throws Exception{ DownFileForFtp df = new DownFileForFtp(); df.getFileNameList("E:\\uploadfiles\\cat"); df.download("E:\\uploadfiles\\cat\\2012-03-29.11.00.00.012.xml", "F:\\temp\\ftpdown\\2012-03-29.11.00.00.012.xml"); } }

转载于:https://my.oschina.net/skyfree/blog/52022

你可能感兴趣的文章
翻译 - 元编程动态方法之public_send
查看>>
ES6中的高阶函数:如同 a => b => c 一样简单
查看>>
C语言之枚举的定义以及测试
查看>>
35.函数介绍
查看>>
node主要应用场景是在大前端
查看>>
Linux的目录ls命令
查看>>
JDBC-简单连接Oracle Database
查看>>
mysql小问题集锦
查看>>
集群tomcat+session共享
查看>>
类火墙的iptables
查看>>
Linux初级入门百篇-LVM 简介
查看>>
MySQL--事务
查看>>
腾讯云首发智能网关流控,公有云进入网络精细管控时代
查看>>
如何在思科虚拟PC机信息进行修改
查看>>
input 下面的span 标签 作为下拉框选项的点击
查看>>
lucene001
查看>>
1985—1990年《ISTP》收录的世界主要国家(地区)科技会议论文情况
查看>>
雨后清风教你如何在Windows 10上禁用笔记本电脑触摸板
查看>>
一名网工对Linux运维的一次经历
查看>>
10 行代码解决漏斗转换计算之性能优化
查看>>