进步,意味着目标不断前移,阶段不断更新,它的视野不断变化。

JAVA利用FTP上传和下载文件

工作 茳先生 642℃ 0评论

ftp-d-30888390

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
 

public class FTPTools {
	private static final String FTPIP = "192.168.1.1";//本地FTP连接IP地址
	private static final String FTPUSERNAME = "users";//FTP连接用户名
	private static final String FTPPWD = "123456";//FTP连接密码

        /**
	 * 下载ftp上的文件
	 * @param applyNo
	 * @return
	 * 20141126
	 */
	public static boolean ftpDowload(String fileName) {
		FTPClient ftp = null;
		int reply;
		boolean isEx = false;

		try {
			//中文必须先转码
			String  filePath = "SPResponse/" + new String(fileName.getBytes("GBK"),"iso-8859-1") + ".pdf";

			ftp = new FTPClient();
			ftp.connect(FTPTools.FTPIP);//打开会话  
			ftp.login(FTPTools.FTPUSERNAME,FTPTools.FTPPWD);//登录  

                        //设置编码,不然下载的文件名是中文的话就会乱码
			ftp.setControlEncoding("utf-8");

                        //响应代码(所有代码解释已列出在本文下方)
			reply = ftp.getReplyCode();
			if(!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return isEx;
			}
			ftp.enterLocalPassiveMode();
			FTPFile[] fs = ftp.listFiles(filePath);
			if(fs.length > 0) {
                                //下载到本地的路径
				File localFile = new File("d:/" + fs[0].getName());
				OutputStream is = new FileOutputStream(localFile);
				isEx = ftp.retrieveFile(filePath ,is);
				is.close();
				ftp.logout();
				isEx = true;
			} else {
				return isEx;
			}
			return isEx;
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			if(ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch(IOException ioe) {}
			}
		}

		return isEx;
	}
 

	/**
	* Description: 向FTP服务器上传文件
	* @param path FTP服务器保存目录
	* @param filename 上传到FTP服务器上的文件名。中文必须先转码
	* @param input 输入流
	* @return 成功返回true,否则返回false
	*/ 
	public static boolean uploadFile(String path,String filename, InputStream input) { 
	    boolean success = false; 
	    FTPClient ftp = new FTPClient(); 
	    
	    try { 
	        int reply; 

	        //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
	        ftp.connect(FTPTools.FTPIP);//打开会话  

		ftp.login(FTPTools.FTPUSERNAME,FTPTools.FTPPWD);//登录  

                //设置传输模式。如果不设置这个模式的话上传word,pdf等文件损坏
		ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

                //响应代码(所有代码解释已列出在本文下方)
	        reply = ftp.getReplyCode(); 

	        if (!FTPReply.isPositiveCompletion(reply)) { //是否响应成功
	            ftp.disconnect(); 
	            return success; 
	        } 
	        
	        ftp.enterLocalPassiveMode();
	        
	        ftp.makeDirectory(path);//创建文件夹
	        
	        ftp.changeWorkingDirectory(path);//定位到该路径
	        
	        ftp.storeFile(filename, input);//创建文件          
	         
	        input.close(); 
	        ftp.logout(); 
	        success = true; 
	    } catch (IOException e) { 
	        e.printStackTrace(); 
	    } finally { 
	        if (ftp.isConnected()) { 
	            try { 
	                ftp.disconnect(); 
	            } catch (IOException ioe) { 
	            } 
	        } 
	    } 
	    return success; 
	}
 
}
响应代码 解释说明
110 新文件指示器上的重启标记
120 服务器准备就绪的时间(分钟数)
125 打开数据连接,开始传输
150 打开连接
200 成功
202 命令没有执行
211 系统状态回复
212 目录状态回复
213 文件状态回复
214 帮助信息回复
215 系统类型回复
220 服务就绪
221 退出网络
225 打开数据连接
226 结束数据连接
227 进入被动模式(IP 地址、ID 端口)
230 登录因特网
250 文件行为完成
257 路径名建立
331 要求密码
332 要求帐号
350 文件行为暂停
421 服务关闭
425 无法打开数据连接
426 结束连接
450 文件不可用
451 遇到本地错误
452 磁盘空间不足
500 无效命令
501 错误参数
502 命令没有执行
503 错误指令序列
504 无效命令参数
530 未登录网络
532 存储文件需要帐号
550 文件不可用
551 不知道的页类型
552 超过存储分配
553 文件名不允许

转载请注明:努力奋斗 » JAVA利用FTP上传和下载文件

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 😯 喵喵喵
    猫腻2016-10-31 17:02 回复