`

用apache的commons-net包中的ftp实现的ftp上传下载

阅读更多
/**
 * File Created at 2015年8月4日
 *
 * Copyright 2015 star.com Limited.
 * All rights reserved.
 */
package com.star.daffodil.common.util;
 
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.nio.file.Files;
import java.nio.file.StandardCopyOption;
 
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 
 
/**
 * <p>
 * FTP上传下载工具类
 * </p>
 * @author qunxing.du
 *
 */
public class FTPUtil {
	
	private static String HOSTNAME = "127.0.0.1";
	private static int PORT = 21;
	private static String USERNAME = "admin";
	private static String PASSWORD = "admin";
	
	private static FTPClient ftp;
	
	private FTPUtil(){}
	
	private static FTPUtil ftpUtil;
	public static FTPUtil getInstance(){
		if(ftp == null){
			ftp = new FTPClient();
		}
		if(ftpUtil == null){
			ftpUtil = new FTPUtil();
		}
		return ftpUtil;
	}
	
	/**
	 * 连接ftp服务器
	 */
	private void connect(){
		FTPClientConfig ftpClientConfig = new FTPClientConfig(FTPClientConfig.SYST_NT);
		ftp.configure(ftpClientConfig);
		try {
			ftp.connect(HOSTNAME, PORT);
			ftp.login(USERNAME, PASSWORD);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 退出关闭连接
	 */
	private void close(){
		if(ftp.isConnected()){
			try {
				ftp.logout();
			} catch (IOException e) {
				e.printStackTrace();
			} finally{
				try {
					ftp.disconnect();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public boolean upload(String dest, InputStream is){
		boolean flag = false;
		connect();
		int reply = ftp.getReplyCode();
		if(!FTPReply.isPositiveCompletion(reply)){
			close();
			return flag;
		}
		try {
			String destFile = dest.replace("\\\\", "/");
			String destDir = destFile.substring(0, destFile.lastIndexOf("/"));
			
			FTPFile[] ftpFiles = ftp.listDirectories("\\");
			boolean isExist = false;
			for (FTPFile ftpFile : ftpFiles) {
				if(destDir.equals(ftpFile.toString())){
					isExist = true;
					break;
				}
			}
			
			if(!isExist){
				ftp.makeDirectory(destDir);
			}
			
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			flag = ftp.storeFile(dest, is);
			if(flag){
				System.out.println("上传成功");
			}else{
				System.out.println("上传失败");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(is != null ){
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			close();
		}
		return flag;
	}
	
	public InputStream download(String file){
		InputStream is = null;
		connect();
		int reply = ftp.getReplyCode();
		if (!FTPReply.isPositiveCompletion(reply)) {
			close();
			return null;
		}
		try {
			is = ftp.retrieveFileStream(file);
			if(ftp.completePendingCommand()){
				System.out.println("下载流读取完成");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			close();
		}
		
		return is;
	}
	public static void main(String[] args) {
		InputStream is = getInstance().download("/upload11/d21/gif/1439029019947.gif");
		FileOutputStream fos = null;
		File file = new File("D:/a2.gif");
		try {
			Files.copy(is, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(fos != null){
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(is != null){
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		
		InputStream uis = null;
		try {
			uis = new FileInputStream("D:/a2.gif");
			getInstance().upload("upload11/d21/gif/" + GlobalUtil.getUniqueNumber() + ".gif", uis);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally{
			if(uis != null){
				try {
					uis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
}
}
 

 

分享到:
评论

相关推荐

    commons-net-ftp-2.0.jar.zip

    在这个特定的案例中,我们关注的是`commons-net-ftp-2.0.jar.zip`这个压缩包,它包含了Apache Commons Net FTP库的2.0版本。这个库对于Java开发者来说,是进行FTP文件传输的重要工具。 FTP是一种用于在互联网上传输...

    Android 利用commons-net-3.3实现ftp上传下载Demo

    implementation 'org.apache.commons:commons-net:3.6' // 使用最新版本替代3.3 } ``` 然后,我们需要创建一个FTP客户端实例并配置连接参数,如服务器地址、端口号、用户名和密码。以下是一个简单的FTP连接示例: ...

    apache commons-net-3.5.jar

    使用apache commons-net包实现文件ftp上传

    commons-net-3.6.jar

    在这个版本中,我们聚焦于`commons-net-3.6.jar`,它提供了丰富的API和工具,使开发者能够方便地进行FTP文件的上传、下载以及读写操作。这个库不仅简化了FTP操作,还为开发者提供了深入理解其内部工作原理的机会,...

    commons-net-jar包.zip

    库提供了FTPClient、FTPSSLClient、FTPSSLSocketFactory等类,可以实现FTP的连接、登录、文件上传、下载、删除、重命名等操作,并且支持主动和被动模式,以及SSL/TLS加密。 3. **Telnet功能** Telnet协议在commons...

    apache的FTP包commons-net-1.4.1.jar,jakarta-oro-2.0.8.jar

    Apache的FTP库是Java开发中一个非常实用的工具,它主要包含了两个核心的JAR包:`commons-net-1.4.1.jar`和`jakarta-oro-2.0.8.jar`。这两个包提供了丰富的功能,允许开发者在Java应用中实现FTP(文件传输协议)的...

    apache-jakarta旗下的所有开源项目jar文件

    apache-jakarta旗下的所有开源...apache-jakarta-commons-net-ftp.jar apache-jakarta-oro.jar apache-jakarta-oro-2.0.8.jar commons-io-2.1-bin commons-logging-1.1.1-bin commons-modeler-2.0.1 commons-net-1.4.1

    apache commons-net-3.5

    版本3.5是这个库的一个稳定发行版,提供了丰富的功能和优化,使得开发者可以轻松地在Java应用程序中实现在FTP服务器上进行文件的上传、下载以及其他操作。 Apache Commons Net库包括了以下关键知识点: 1. **FTP...

    commons-net实现ftp帮助文档 api

    Apache Commons Net提供了丰富的类和方法,使得开发者可以方便地执行FTP任务,如上传、下载文件,创建、删除目录,以及管理文件权限等。 **FTPClient类** 是这个库中的核心,它实现了FTP协议的大部分功能。首先,你...

    commons-net-3.6

    3. **commons-net-examples-3.6.jar**:包含了一些示例代码,演示了如何使用Apache Commons Net库的各种功能。这些例子是学习和快速上手的良好起点,可以帮助开发者快速理解和应用库中的函数。 此外,压缩包中还有...

    commons-net-3.6 jar包.zip

    在`commons-net-3.6.jar`这个版本中,我们主要关注FTP功能,因为这是该库最广泛使用的部分。 FTP支持是Apache Commons Net的核心功能之一。它提供了全面的FTP客户端实现,包括连接管理、文件上传、下载、列表操作、...

    commons-net-3.3.jar

    在`commons-net-3.3.jar`中,FTPClient类是核心,它实现了完整的FTP协议。开发者可以通过创建FTPClient实例,然后连接到FTP服务器,进行登录、设置传输模式(ASCII或BINARY)、改变工作目录、上传和下载文件等一系列...

    使用Apache commons-net.jar开发FTP工具类

    总结起来,通过使用Apache Commons Net.jar,我们可以轻松地创建一个FTP工具类,实现FTP连接、文件上传和下载等操作。这个库不仅简化了网络编程的复杂性,还提供了稳定和高效的FTP客户端实现。在实际项目中,这样的...

    commons-net-ftp-2.0.rar

    这个库,如"commons-net-ftp-2.0.rar"所示,包含了一系列的JAR文件,使得开发者能够轻松地构建FTP客户端应用。 FTP(File Transfer Protocol)是一种用于在Internet上可靠地传输文件的协议。Apache Commons Net库为...

    commons-net-3.3-3.4-3.5-3.6.zip

    在Android应用开发中,有时我们需要实现将文件上传到FTP(File Transfer Protocol)服务器的功能。Apache Commons Net库是一个非常实用的工具,它提供了多种网络协议的支持,包括FTP。在这个压缩包"commons-...

    commons-net-1.4.1.jar

    Apache Commons Net 1.4.1提供了一个全面的Java实现,支持FTP的各种操作,包括上传、下载、列出目录、创建和删除文件等。这个库不仅简化了FTP交互,还处理了许多底层的网络细节,如连接管理和错误处理,使得开发者...

    用org.apache.commons.net.ftp.FTPClient包实现简单文件下载

    在本文中,我们将深入探讨如何使用`org.apache.commons.net.ftp.FTPClient`包来实现简单的文件下载功能。这个过程涉及到几个关键步骤,包括连接到FTP服务器、登录、设置传输模式、下载文件以及断开连接。 首先,你...

    apache-jakarta-commons-net-ftp.jar

    jar包,亲测可用

    commons-net-3.1.jar,3.3,3.6版本

    - Commons Net提供了完善的FTP客户端实现,可以进行文件的上传、下载、删除等操作,支持FTP、FTPS(FTP over SSL/TLS)和SFTP(SSH File Transfer Protocol)。 - 在不同版本中,FTP客户端的性能和稳定性得到了...

    利用commons-net包实现ftp上传下载例子

    标题中的“利用commons-net包实现ftp上传下载例子”是指通过Apache Commons Net库来实现FTP(File Transfer Protocol)的上传和下载功能。Apache Commons Net是Apache软件基金会开发的一个Java库,它提供了多种网络...

Global site tag (gtag.js) - Google Analytics