`
流浪鱼
  • 浏览: 1684973 次
  • 性别: 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两种登录方式,打破原有黑端显示命令行和文件名的...

    linux下jdk7

    另外,如果你需要在没有互联网连接的环境中安装JDK,可以考虑在一台有网络的机器上下载JDK7,然后通过USB驱动器或网络共享将文件传输到目标机器上。此外,还可以探索使用第三方镜像站点,但需注意保持软件的更新和...

    FTP工具(jdk1.6版).rar

    JDK 1.6版本中提供了`java.net.FTPURLConnection`,它是`URLConnection`的一个子类,可以方便地处理FTP连接。不过,本压缩包中的实现可能是通过自定义的类和方法来封装FTP操作。 3. FTP命令: - `PUT`:上传文件到...

    linux centos 下 jdk1.8 tar.gz 离线安装包.7z

    本文将详细介绍如何在CentOS 7环境下,通过离线方式安装JDK 1.8的tar.gz格式安装包。首先,我们需要准备的是一个名为“linux centos 下 jdk tar.gz 离线安装包”的文件,它通常是一个.7z压缩文件,包含了JDK的源代码...

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

    在Java编程环境中,FTP(File Transfer Protocol)是一个用于在...这个过程涵盖了FTP连接、文件操作和压缩/解压缩技术,是Java中常见的文件处理任务。在实际应用中,还需要考虑错误处理、线程安全以及可能的性能优化。

    jdk8的rpm包与FastDFS.zip

    2. 将下载的"jdk8的rpm包"传输到Linux服务器上,例如通过SCP或FTP。 3. 使用`rpm -ivh jdk-8.rpm`命令进行安装。请注意替换`jdk-8.rpm`为实际的文件名。 4. 安装完成后,设置环境变量。在`~/.bashrc`或`/etc/profile...

    finalshell安装包以及jdk

    FinalShell是一款功能强大的一体化远程管理工具,集合了SSH客户端、FTP客户端和服务器管理等多种功能,深受IT管理员和开发者喜爱。它的主要特点包括多标签管理、命令行自动补全、文件同步、批量执行命令等,极大地...

    centos7离线安装jdk11

    本篇将详细介绍如何在CentOS 7系统下离线安装JDK 11,主要涉及的步骤包括下载JDK文件、上传至服务器以及执行安装脚本。 首先,你需要从Oracle官方网站或其他可信源下载JDK 11的Linux二进制文件,这里我们用的是"jdk...

    chilkat-9.4.1-jdk7-win32.zip

    "Chilkat-9.4.1-jdk7-win32.zip" 是一个软件开发工具包,主要用于Java开发者在Windows 32位环境下进行集成。Chilkat Software是一家知名的软件公司,提供各种API(应用程序接口)和服务,尤其在处理文件、加密、邮件...

    jdk6_api文档 中文版

    《深入解析JDK6 API中文版》 JDK(Java Development Kit)是Oracle公司发布的用于开发Java应用程序的软件包,其中包含了Java运行环境、编译器、类库以及各种工具。JDK6作为Java发展历程中的一个重要版本,为开发者...

    jdk1.8版本

    7. **新的反射API**:JDK 1.8提供了对反射API的增强,如MethodHandles、Lookup和MethodHandle类,提供了更高效和安全的方式来访问方法和字段。 8. ** Nashorn JavaScript引擎**:JDK 1.8引入了一个内置的Nashorn ...

    linux安装卸载jdk

    - **方法二**: 使用SSH连接工具如PuTTY,并通过FTP方式上传文件。 **2.3 开始安装** - **步骤1**: 确保磁盘空间充足。 - **步骤2**: 如果JDK安装文件没有执行权限,可以通过命令`chmod a+x jdk-6u13-linux-i586....

    Apache FTPServer的配置使用

    FTP 协议使用 TCP 连接来传输文件,通常使用 21 号端口进行连接。 FTP 的工作模式 FTP 协议有两种工作模式:主动模式和被动模式。 主动模式(Active Mode):客户端打开一个随机端口,连接到服务器的 21 号端口,...

    Apache Ftpserver 全套

    3. **事件驱动模型**:Ftpserver基于事件驱动模型工作,这提高了其性能和可扩展性,能够处理大量并发连接。 4. **安全性**:了解如何配置SSL/TLS以确保数据传输安全,以及如何设置权限和访问控制列表以保护服务器...

    服务器CentOs6.6+ JDK1.7+Tomcat7+MySQL5.6安装部署记录

    ### 服务器CentOs6.6+ JDK1.7+Tomcat7+MySQL5.6安装部署记录 #### 一、安装CentOs6.6 **步骤解析:** 1. **下载与烧录ISO镜像:** - 首先需要下载好Linux (CentOs6.6mini) 的ISO文件,通过U盘制作工具如“大白菜...

    ftp.zip_FTP客户端程序_ftp_ftp java_ftp客户端 java_java ftp客户端

    1. **FTP连接**:使用`java.net.Socket`类建立与FTP服务器的TCP连接。FTP协议通常基于TCP的21号端口进行通信,控制连接在此端口上建立。 2. **FTP命令**:Java FTP客户端通过`java.net.Socket`发送FTP命令,如`USER...

    jdk-8u291-linux-x64.tar.gz

    通常,这可以通过SSH连接或使用FTP工具完成。下载后,将其放在一个合适的目录,例如 `/home/user/downloads/`。 接下来,我们需要解压这个压缩包。可以使用`tar`命令来完成: ```bash cd /home/user/downloads/ ...

    Java FTP 指定下载文件和上传文件到指定的服务器目录

    throw new RuntimeException("断开FTP连接异常", e); } } } ``` **关键步骤解析**: 1. **连接FTP服务器**:通过`connect`方法指定服务器IP地址。 2. **登录FTP服务器**:使用`login`方法进行用户认证。 3. **...

    jdK6 中文API

    5. **网络编程**:`java.net`包提供了网络通信的功能,如`Socket`和`ServerSocket`类用于TCP/IP连接,`URL`和`URLConnection`用于HTTP和FTP请求。 6. **Swing GUI**:`javax.swing`包包含用于构建图形用户界面(GUI...

Global site tag (gtag.js) - Google Analytics