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
文件名不允许
喜欢 (0)or分享 (0)