java中ftp上传、下载、重命名、删除功能实现

本文记录了使用Java实现FTP文件上传、下载、重命名和删除功能的过程,该实践在与尼尔森数据对接时被应用。通过这次经验,作者意识到Java中对FTP的抽象封装深入理解底层技术的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

与尼尔森数据对接使用了ftp技术,特别留下来作为备用。哎,弄完这个深知java遮掩的东西太多了,什么都是调用调用就完了,得去深入了解下底层东西。

package com.voole.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.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;  
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;  
import org.apache.log4j.Logger;

  
public class FtpUtil {    
     
	
	    private  static FTPClient ftpClient = new FTPClient();
	    private  static String encoding = System.getProperty("file.encoding");
	    
	    private static  FtpUtil instance; 
	    Logger log = Logger.getLogger(FtpUtil.class);
	    
	    /**
	     * 实例化FtpUtil
	     * @return
	     */
	   public synchronized static FtpUtil getInstance(){  
	        if( instance == null ){  
	            instance = new FtpUtil();  
	        }  
	        return instance;  
	    }  
	    
	    
	    
	    /**
	     * 连接FTP服务器
	     */
	    public  boolean login(String url, int port, String username,
	            String password){
	    	try {
	            int reply;
	            ftpClient.connect(url); // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器,否则 ftp.connect(url, port);// 连接FTP服务器
	            ftpClient.login(username, password); // 登录
	            ftpClient.setControlEncoding(encoding);
	            reply = ftpClient.getReplyCode();
	            if (!FTPReply.isPositiveCompletion(reply)) { // 检验是否连接成功
	            	log.info("FTP连接失败");
	                ftpClient.disconnect();
	                return false;
	                }
	            log.info("FTP连接成功");
	         }catch (IOException e) {
		           e.printStackTrace();
		           closeCon(); //关闭  
		     }
	        return true;
	    }
	    
	    
	    /**
	     * Description: 向FTP服务器上传文件
	     *
	     * @Version1.0
	     * @param url
	     *            FTP服务器hostname
	     * @param port
	     *            FTP服务器端口
	     * @param username
	     *            FTP登录账号
	     * @param password
	     *            FTP登录密码
	     * @param path
	     *            FTP服务器保存目录,如果是根目录则为“/”
	     * @param filename
	     *            上传到FTP服务器上的文件名
	     * @param input
	     *            本地文件输入流
	     * @return 成功返回true,否则返回false
	     */
	    public boolean uploadFile(String ftpPath,String filePath,String fileName) {
	        boolean result = false;
	        try {
	        	if( ftpClient!=null ){  
	        		FileInputStream input = new FileInputStream(new File(filePath+fileName));
		            boolean change = ftpClient.changeWorkingDirectory(ftpPath); // 转移工作目录至指定目录下 
		            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
		            if (change) {
		            	log.info("成功切换目录到"+ftpPath);
		                result = ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), input);
		                if (result) {
		                	log.info(fileName+",上传成功!");
		                }else{
		                	log.info(fileName+",上传失败");
		                }
		            }
		            input.close();
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } 
	        return result;
	    }
	 
	    /**
	     * 将本地文件上传到FTP服务器上
	     *
	     *
	    public static void testUpLoadFromDisk(String url, int port, String username,
	            String password, String path, String filename,String filepath) {
	        try {
	            FileInputStream in = new FileInputStream(new File(filepath));
	            boolean flag = uploadFile(url, port, username,password, path, filename, in);
	            System.out.println(flag);
	        } catch (FileNotFoundException e) {
	            e.printStackTrace();
	        }
	    }
	    /
	    /**
	     * 删除FTP上的文件
	     */
	    
	    public static boolean removeFile(String srcFname){  
	        boolean flag = false;  
	        if( ftpClient!=null ){  
	            try {  
	                flag = ftpClient.deleteFile(srcFname);  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	                closeCon();  
	            }  
	        }  
	        return flag;  
	    }  
	    
	    /**
	     * 改名FTP上的文件
	     */
	    
	    public static boolean renameFile(String srcFname,String targetFname){  
	        boolean flag = false;  
	        if( ftpClient!=null ){  
	            try {  
	                flag = ftpClient.rename(srcFname,targetFname);  
	            } catch (IOException e) {  
	                e.printStackTrace();  
	                closeCon();  
	            }  
	        }  
	        return flag;  
	    }  
	    
	
	    /** 
	     *<p>销毁ftp连接</p>  
	     */  
	    public static void closeCon(){  
	        if(ftpClient !=null){  
	            if(ftpClient.isConnected()){  
	                try {  
	                    ftpClient.logout();  
	                    ftpClient.disconnect();  
	                } catch (IOException e) {  
	                    e.printStackTrace();  
	                }   
	            }  
	        }  
	    }  
	    
	    /**
	     * 下载单个文件
	     */
	    public static boolean downloadFile(String ftpPath,String filePath,String fileName){
	    	try {
	        	if( ftpClient!=null ){  
	        		FileInputStream input = new FileInputStream(new File(filePath+fileName));
		            boolean change = ftpClient.changeWorkingDirectory(ftpPath); // 转移工作目录至指定目录下 
		            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
		            if (change) {
		            	FTPFile[] fs = ftpClient.listFiles();  
		                for(FTPFile ff:fs){  
		                    if(ff.getName().equals(fileName)){  
		                        File localFile = new File(filePath+"/"+ff.getName());  
		                        OutputStream is = new FileOutputStream(localFile);   
		                        ftpClient.retrieveFile(ff.getName(), is);  
		                        is.close();  
		                    }  
		                }  
		            }
		            input.close();
	            }
	        } catch (IOException e) {
	            e.printStackTrace();
	        } 
	    	return true;
	    } 
    
}  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值