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上传和下载文件