直接上代码: ftp上传文件
。
/**
* 上传文件到ftp服务器
* @param host ftp服务器ip地址
* @param port ftp服务器端口号
* @param username ftp服务器账号
* @param password ftp服务器密码
* @param filePath 文件上传地址格式 files/file/dd
* @param filename 文件名称
* @param input 文件流
* @return true:上传成功 false : 上传失败
*/
public static boolean uploadFile(String host, int port, String username, String password, String filePath, String filename, InputStream input) throws IOException {
boolean result = false;
FTPClient ftp = new FTPClient(); //创建ftp操作对象
try {
ftp.enterLocalPassiveMode(); //被动模式:服务端开放端口给客户端用
ftp.setControlEncoding(“iso-8859-1”); //设置编码格式
ftp.connect(host, port); //连接ip端口号
ftp.login(username, password); //登录
int reply = ftp.getReplyCode(); //返回响应码:230 登录成功
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
log.info(“链接不合法”);
return result;
}
if (!ftp.changeWorkingDirectory(filePath)) {//切换目录,不成功则创建该目录
String[] dirs = filePath.split(“/”);//根据/切割
String tempPath = “”;
for (int i= 0; i<dirs.length;i++ ) {
String dir = dirs[i]; //循环创建目录
if (dir != null && !“”.equals(dir)) {
tempPath =tempPath+ “/” + dir;
if (!ftp.changeWorkingDirectory(tempPath)) {
ftp.makeDirectory(new String(tempPath.getBytes("GBK"),"iso-8859-1"));//创建目录(使用new String(tempPath.getBytes("GBK"),"iso-8859-1"))可以解决创建和切换中文目录问题
ftp.changeWorkingDirectory(new String(tempPath.getBytes("GBK"),"iso-8859-1")); //切换目录
}
}
}
}
ftp.setFileType(2);
if (!ftp.storeFile(new String(filename.getBytes("GBK"),"iso-8859-1"),input)) {//上传数据的同时设置以下编码
log.info("上传文件失败");
return result; //上传失败返回false
}
result = true; //上传成功 将返回值设置为true
input.close(); //关闭流
ftp.logout();//登出
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()){
try {
ftp.disconnect();
} catch (IOException iOException) {}
}
if(input!=null){
input.close();
}
}
return result;
}
直接上代码: ftp下载文件
。
/**
* 从ftp服务器下载文件
* @param host ip地址
* @param port 端口号
* @param loginname 账号
* @param password 密码
* @param DownloadTag FTP服务器下载目录标识 /files
* @param downloadLocalTag 文件下载到本机的目录标识
* @return true: 下载成功 flse :下载失败
*/
public static boolean downloadFile(String host, int port, String loginname, String password, String DownloadTag,String downloadRootPath, String downloadLocalTag) throws IOException {
boolean result = false;
FTPClient ftp = new FTPClient(); //创建ftp连接对象
ftp.setConnectTimeout(100000);//设置超时时间
OutputStream out = null;
try {
ftp.enterLocalPassiveMode(); //被动模式:服务端开放端口给客户端用
ftp.setControlEncoding("GBK"); //设置编码格式
ftp.connect(host, port); // 连接至服务器
ftp.login(loginname, password); // 登录服务器
int reply = ftp.getReplyCode(); //返回220:链接成功 230:登录成功
if (!FTPReply.isPositiveCompletion(reply)) { // 判断返回码是否合法
ftp.disconnect();// 不合法时断开连接
log.info("链接不合法");
return result; // 结束程序
}
boolean flag = ftp.changeWorkingDirectory(DownloadTag);// 设置文件操作目录 (切换)
if(flag){
log.info("切换"+DownloadTag+"目录成功");
}else{
log.info("切换"+DownloadTag+"目录失败");
return result ;
}
FTPFile[] files = ftp.listFiles();// 获取该目录下所有文件
if(files.length <= 0){
log.info(DownloadTag+"目录下没有文件,无法下载");
return result ;
}
for(int i = 0 ; i < files.length ; i++){
FTPFile file = files[i]; //获取单个文件
log.info("获取到的第"+i+"个文件为:"+file.getName());
if (file.isFile()) {//判断是否为文件
String localFilePath = String.valueOf(downloadRootPath) + "/" + downloadLocalTag + "/" + file.getName();//下载到本机的地址目录
log.info("文件备份到本地目录为-----"+localFilePath);
File localFile = new File(localFilePath); //创建文件对象
FtpUtil.isChartPathExist(String.valueOf(downloadRootPath) + "/" + downloadLocalTag);//检查是否存在不存在则创建
out = new FileOutputStream(localFile); // 将文件转成流
log.info("文件下载中-----");
result = ftp.retrieveFile(file.getName(), out); // 下载文件 ture 下载成功 false 下载失败
out.close();//关闭输出流
if (result){ //下载成功之后,删除ftp文件
log.info("文件下载成功,文件已经从ftp服务器地址"+DownloadTag+"/" + file.getName()+"下载到 :"+localFilePath);
ftp.deleteFile(String.valueOf(DownloadTag) + "/" + file.getName());
log.info("ftp服务器上---"+DownloadTag+"/" + file.getName()+"---文件删除成功");
}
}
}
ftp.logout(); //登出
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()){//ftp如果还有连接,断开连接
try {
ftp.disconnect();
} catch (IOException iOException) {}
}
if(out!=null){
out.close();//关闭输出流
}
}
return result;// 返回结果
}
创作不易,大家帮忙关注一下公众号,感谢。