`
流浪鱼
  • 浏览: 1635293 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk7 FTP连接

    博客分类:
  • java
 
阅读更多

使用jdk7用于连接和操作ftp服务器

package com.voiinnov.xingye.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;

import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpDirEntry;
import sun.net.ftp.FtpProtocolException;

public class FtpClientUtil {
	private FtpClient ftpClient;    
	
	
	public FtpClient getFtpClient(){
		return this.ftpClient;
	}
	/**
	 * 连接FTP服务器
	 * @param ip  ip地址
	 * @param port 端口号
	 * @param user 用户名
	 * @param password  密码
	 * @param path  FTP的根目录
	 */
	public void connectServer(String ip, int port, String user, String password, String path) {
		try {            
			/* ******连接服务器的两种方法*******/            
			ftpClient = FtpClient.create();            
				try {                
					SocketAddress addr = new InetSocketAddress(ip,port);
					ftpClient.connect(addr);                 
					ftpClient.login(user, password.toCharArray());
					System.out.println("login success!"); 
					//// 用2进制上传、下载
					ftpClient.setBinaryType();
					if (path!=null&&path.length() != 0){                        
						//把远程系统上的目录切换到参数path所指定的目录                        
						ftpClient.changeDirectory(path);
					}            
				} catch (FtpProtocolException e) {                
					e.printStackTrace();            
				}        
		} catch (IOException ex) {            
			ex.printStackTrace();             
		}    
	}  
	
	
	/**     
	* 关闭连接     
	*/    
	public void closeConnect() {        
		try {            
			ftpClient.close();            
				System.out.println("disconnect success");        
		} catch (IOException ex) {            
			System.out.println("not disconnect");            
			ex.printStackTrace();            
		}    
	}    
	
	/**
	 * 上传文件使用流
	 * @param localFile
	 * @param remoteFile
	 */
	public void uploadStream(String localFile, String remoteFile){
		FileInputStream is = null; 
		File file_in = new File(localFile);            
		try {
			is = new FileInputStream(file_in);
			ftpClient.putFile(remoteFile, is);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (FtpProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	/**     
	* 上传文件     
	* @param localFile 本地文件     
	* @param remoteFile 远程文件     
	*/    
	public void upload(String localFile, String remoteFile) {
			//this.localfilename = localFile;        
			//this.remotefilename = remoteFile;        
			OutputStream os = null;        
			FileInputStream is = null;        
			try {            
				//将远程文件加入输出流中            
				try {                
					os = ftpClient.putFileStream(remoteFile);            
				} catch (
					FtpProtocolException e) {                
					e.printStackTrace();            
				}            
				//获取本地文件的输入流            
				File file_in = new File(localFile);            
				is = new FileInputStream(file_in);            
				//创建一个缓冲区            
				byte[] bytes = new byte[1024];            
				int c;            
				while ((c = is.read(bytes)) != -1) {
					os.write(bytes, 0, c);            
				}            
				System.out.println("upload success");        
			} catch (IOException ex) {            
				System.out.println("not upload");            
				ex.printStackTrace();            
			} finally{            
				try {                
					if(is != null){                    
						is.close();                
					}            
				} catch (IOException e) {                
					e.printStackTrace();            
				} finally {                
					try {                    
						if(os != null){                        
							os.close();                    
						}                
					} catch (IOException e) {                    
						e.printStackTrace();                
					}            
				}        
		}    
	}  
	
	/**     
	* 下载文件     
	* @param remoteFile 远程文件路径(服务器端)     
	* @param localFile 本地文件路径(客户端)     
	*/    
	public void download(String remoteFile, String localFile) {        
		InputStream is = null;        
		FileOutputStream os = null;        
		try {            
			//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。            
				try {                
					is = ftpClient.getFileStream(remoteFile);            
				} catch (FtpProtocolException e) {                                
					e.printStackTrace();            
				}            
				File file_in = new File(localFile);            
				os = new FileOutputStream(file_in);            
				byte[] bytes = new byte[1024];            
				int c;            
				while ((c = is.read(bytes)) != -1) {                
					os.write(bytes, 0, c);            
				}            
				System.out.println("download success");        
		} catch (IOException ex) {            
			System.out.println("not download");            
			ex.printStackTrace();            
		} finally{            
			try {                
				if(is != null){                    
					is.close();                
				}            
			} catch (IOException e) {                
				e.printStackTrace();            
			} finally {                
				try {                    
					if(os != null){                        
						os.close();                    
					}                
				} catch (IOException e) {                    
					e.printStackTrace();                
				}            
			}        
		}    
	} 
	
	/**
	 * 
	 * @param remoteFile
	 * @return
	 */
	public String downFile2String(String remoteFile){
		InputStream is = null;  
		StringBuffer sb = null;
		BufferedReader bufferReader = null;
		try {
			is = ftpClient.getFileStream(remoteFile);
			sb = new StringBuffer();
			bufferReader = new BufferedReader(new InputStreamReader(is));
			String line = null;
			while ((line = bufferReader.readLine()) != null) {
				System.out.println("读取的数据:"+line);
				sb.append(line+"\n");
			}
		} catch (FtpProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	/**
	 * 判断FTP服务器已经连接并且登陆
	 * @return
	 */
	private  boolean  isConAndLogin(){
		boolean flag = false;
		flag =ftpClient.isLoggedIn()&&ftpClient.isConnected();
		return flag ;
	}
	
	/**
	 * 创建目录
	 * @param path  目录名
	 * <br/>
	 * 如果需要一次性创建多个目录,可以使用这种字符串“test/test1/test2”直接创建多个目录
	 */
	public  void makeDir(String path){
		try {
			if(isConAndLogin()){
				ftpClient.makeDirectory(path);
			}else{
				System.out.println("FTP没有连接成功");
			}
			
		} catch (FtpProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 重命名
	 * @param sPath  源文件名
	 * @param dPath  目标文件名
	 */
	public  void renameDir(String sPath , String dPath ){
		try {
			if(isConAndLogin()){
				ftpClient.rename(sPath, dPath);
			}else{
				System.out.println("FTP没有连接成功");
			}
		} catch (FtpProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 递归删除文件夹
	 * @param path
	 */
	public void deleteDirs(String path) {
		try {
	            Iterator<FtpDirEntry> dirEntryI =getFtpClient().listFiles(path);
	            if(dirEntryI.hasNext()){
					FtpDirEntry entry = null;
					while(dirEntryI.hasNext()){
						entry = dirEntryI.next();
						//System.out.println(entry.getType()+"    "+entry.getName());
						if(entry.getType()==FtpDirEntry.Type.DIR){
							this.deleteDirs(path+File.separator+entry.getName());
							getFtpClient().removeDirectory(path+File.separator+entry.getName());
						}else{
							getFtpClient().deleteFile(path+File.separator+entry.getName());
						}
						
					}
				}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
	
	/**
	 * 删除文件夹(删除的时候文件夹必须为空)
	 * @param path
	 */
	public  void delDir(String path){
		try {
			if(isConAndLogin()){
				ftpClient.removeDirectory(path);
			}else{
				System.out.println("FTP没有连接成功");
			}
		} catch (FtpProtocolException e) {
			System.out.println("没有连接");
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 测试删除文件夹
	 */
	public static void testDleDir(){
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		String path = "20140512_back";
		fu.deleteDirs(path);
		fu.delDir(path);
		fu.closeConnect();
	}
	
	/**
	 * 测试重命名文件夹
	 */
	public static void testRenameDir(){
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		String spath = "20150521";
		String dpath = "20140512_back";
		fu.renameDir(spath, dpath);
		fu.closeConnect();
	}
	
	
	/**
	 * 测试单个文件上传
	 */
	public static void testSigleUplad(){
		Date now = new Date(); 
		SimpleDateFormat sDateFormat = new SimpleDateFormat();
		sDateFormat.applyPattern("yyyyMMdd");
		String dir = "/"+sDateFormat.format(now);
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		dir=dir+"/xingyeblank";
		//在FTP创建文件夹
		fu.makeDir(dir);
		//本地文件
		String localfile = "E:/test/ZXRZ_900201_TKSQ_20150521.txt";  
		//上传到ftp远程文件
		String remotefile = dir+"/ZXRZ_900201_TKSQ_20150521.txt"; 
		//上传        
		sDateFormat.applyPattern("yyyy-MM-dd   hh:mm:ss");    
		System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间        
		fu.upload(localfile, remotefile);        
		System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间        
		fu.closeConnect();   

	}
	
	/**
	 * 测试单个文件上传
	 */
	public static void testSigleUplad2(){
		Date now = new Date(); 
		SimpleDateFormat sDateFormat = new SimpleDateFormat();
		sDateFormat.applyPattern("yyyyMMdd");
		String dir = "/"+sDateFormat.format(now);
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		dir=dir+"/xingyeblank";
		//在FTP创建文件夹
		fu.makeDir(dir);
		//本地文件
		String localfile = "E:/test/ZXRZ_900201_TKSQ_20150521.txt";  
		//上传到ftp远程文件
		String remotefile = dir+"/ZXRZ_900201_TKSQ_20150521.txt"; 
		//上传        
		sDateFormat.applyPattern("yyyy-MM-dd   hh:mm:ss");    
		System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间        
		fu.uploadStream(localfile, remotefile);  
		System.out.println(sDateFormat.format(new java.util.Date()));// new Date()为获取当前系统时间        
		fu.closeConnect();   

	}
	
	/**
	 * 测试文件加载
	 */
	public static void testDownFile(){
		//下载到本地文件
		String localfile = "E:/test/AESUtils副本3333.java";  
		//ftp远程文件
		String remotefile = "20150521/xingyeblank/AESUtils111.java";
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		fu.download(remotefile, localfile);
	}
	
	public static void testDownFile2String(){
		//ftp远程文件
		String remoteFile = "20150521/xingyeblank/ZXRZ_900201_TKSQ_20150521.txt";
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		String str = fu.downFile2String(remoteFile);
		System.out.println(str);
	}
	
	/**
	 * 测试创建文件夹
	 */
	public static void testMakeDir(){
		FtpClientUtil fu = new FtpClientUtil();
		/* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器         */  
		fu.connectServer("127.0.0.1", 21, "test", "test", null);
		try {
			fu.getFtpClient().makeDirectory("20150521/test");
			fu.getFtpClient().makeDirectory("20150521/test2");
			fu.getFtpClient().makeDirectory("20150521/test3");
			fu.getFtpClient().makeDirectory("20150521/test4");
			fu.getFtpClient().makeDirectory("20150521/test5");
			fu.closeConnect();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String agrs[]) {  
		//testSigleUplad();
		//testMakeDir();
		//testRenameDir();
		//testDleDir();
		//testDownFile();
		//testDownFile2String();
		testSigleUplad2();
		
		//---------------其他方法的说明----------------
		//从FTP下载指定的文件到OutputStream下
		//ftpClient.getFile(String remotePath, OutputStream);
		//如果是文件名列出文件信息,如果是目录则列出文件列表
		//ftpClient.list(path);
		//列出指定目录内容
		//ftpClient.nameList(path);
	}

}

 

 

 

 

分享到:
评论

相关推荐

    SpringBoot2.2+commons-pool2实现多Ftp连接池完整项目,开箱即用,经过长期生产使用稳定可靠

    使用JDK1.8、SpringBoot2.2.10.RELEASE、lombok1.18.8、guava23.0、hutool5.3.10、commons-pool2 2.7.0、tika1.22等实现多Ftp连接池实现,通过守护线程实现连接池内连接可用性校验,配置最大、最小连接个数防止Ftp...

    远程连接工具,支持SFTP,FTP 需要自带jdk环境

    远程连接工具,支持SFTP,FTP 需要自带jdk环境 该平台类似于网页版的Xshell,基于cookie和json的方式存储登录信息无数据库更方便兼容每个用户的使用,支持SFTP和FTP两种登录方式,打破原有黑端显示命令行和文件名的...

    java实现Ftp批量下载文件及解压

    java实现连接登录Ftp,下载Ftp指定文件夹下的所有文件,并解压所有压缩文件,同时支持对指定文件夹进行文件压缩

    Centos部署Yum、JDK、Nginx、Tomcat、MySQL、Emqx、FTP及配置(超详细)

    本说明文档针对centos最小安装操作系统部署Yum、JDK、Nginx、Tomcat、MySQL、Emqx、FTP及配置整理,建议指定一个统一目录...FTP 使用TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    基于Spring MVC的web框架 1.1.11

    web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 1.1.8 jquery 图片预览插件 图片滚动显示插件 1.1.9 jquery实现鼠标在按钮上显示窗口,离开窗口和按钮时消失 1.1.10 ...

    java jdk实列宝典 光盘源代码

    Ftp客户端,Mainframe.java; 14数据库 连接各种数据库DBconnector.java; 获得数据库和表的元数据Getmetadata.java; 查询和更新数据库OperateDatadb.java; 批处理,介绍如何一次执行一批sql语句,这些sql语句用...

    linux安装jdk,tomcat 配置vsftp远程连接的步骤

    不知不觉入行也有一年了,这两天在公司上班有空了就自己装了个vmware虚拟机,装了个红帽6.1完全命令行的操作系统,想着搭个公司现在在用的测试环境,没想到中间碰到了很多问题,不过大部分都解决了,现在可以达到...

    零基础学会Linux常用配置

    七、 Linux系统安装(centos7) 56 八、 Linux vi/vim 59 九、 配置IP地址 66 十、 配置终端连接工具(Finalshell) 70 十一、 Centos防火墙配置 70 十二、 Centos常用命令 73 十三、 上传下载文件到Linux系统 80 十...

    Hadoop安装与配置

    这些文档中包括了VMWare虚拟机的安装、Linux系统的安装与配置,SSH连接配置和FTP服务的配置。还包括了Hadoop的安装与配置,其中包括了JDK的安装与配置,在Linux下安装hadoop以及基于伪分布式系统的Hadoop配置等。

    基于SpringMVC的一个web框架

    web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 1.1.8 jquery 图片预览插件 图片滚动显示插件 1.1.9 jquery实现鼠标在按钮上显示窗口,离开窗口和按钮时消失 1.1.10 ...

    Linux服务器部署教程

    Linux系统安装、基础配置、JDK配置、Oracle配置、Jboss配置、SSH连接、 FTP配置

    一个可以直接运行的基于SpringMVC的web框架1.1.12

    web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 1.1.8 jquery 图片预览插件 图片滚动显示插件 1.1.9 jquery实现鼠标在按钮上显示窗口,离开窗口和按钮时消失 1.1.10 ...

    可以直接运行的基于SpringMVC的web框架示例,也可以直接当公司框架

    web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 1.1.8 jquery 图片预览插件 图片滚动显示插件 1.1.9 jquery实现鼠标在按钮上显示窗口,离开窗口和按钮时消失 1.1.10 ...

    经常被骗linux_oracle2

    里面内容有linux6.2的安装,jdk1.6的安装,oracle11g的安装, ntfs移动硬盘问题,flash插件,chrome浏览器,mplayer...利用dos批处理jdk1.6(windows),oracle10g(windows),plsql developer(64位)连接数据库的全过程

    Hellohao全网对象存储图床源码.rar

    目前已经支持对接本地、网易、阿里、又拍、七牛、腾讯、FTP、U-File、Backblaze、Minio等存储源。功能强悍,作者立志要把图像托管一步一步开发到极致。未来,Hellohao图像托管程序不仅仅是图床那么简单。 底层上将...

    Hellohao全网对象存储图床源码

    目前已经支持对接本地、网易、阿里、又拍、七牛、腾讯、FTP、U-File、Backblaze、Minio等存储源。 功能强悍,作者立志要把图像托管一步一步开发到极致。未来,Hellohao图像托管程序不仅仅是图床那么简单。 底层...

    概要设计说明书模版

    渠道运营支撑系统与BOSS系统采用FTP的传输协议,由联创公司按照日接口,月接口等约定进行数据传输。 日接口:每日13:00之前将前日的日数据主动传输至以下目录: 以标志文件进行传输过程结束的标志(该文件需要说明...

    JAVA 范例大全 光盘 资源

    实例1 下载、安装并配置JDK 1 实例2 第一个Java程序 3 实例3 在Eclipse中创建第一个Java程序 4 常见问题 javac不是内部或者外部命令 6 常见问题 找不到类文件 6 常见问题 语法错误 7 第2章 Java基础语法 9 ...

Global site tag (gtag.js) - Google Analytics