package com.iflytek.ftp.socket;
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 java.io.UnsupportedEncodingException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class Util {
public static FTPClient ftpClient = new FTPClient();
/**
*
* getConnect:{链接ftp服务器}. <br/>
* @author xwhe
* @return
* @throws Exception
* @created 2017年12月28日 下午2:00:07 <br/>
* @since JDK 1.6
*/
public static boolean getConnect() throws Exception {
// 连接FTP服务器
ftpClient.connect("172.16.26.139", 21); // IP 端口
// 登录FTP服务器
ftpClient.login("study", "1111"); // 用户名 密码
// 验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode(); //ftp客户端代码
if (!FTPReply.isPositiveCompletion(replyCode)) {
return false;
}
return true;
}
/**
* * 下载文件 *
* @param hostname FTP服务器地址 *
* @param port FTP服务器端口号 *
* @param username FTP登录帐号 *
* @param password FTP登录密码 *
* @param pathname FTP服务器文件目录 *
* @param filename 文件名称 *
* @param localpath 下载后的文件路径 *
* @throws UnsupportedEncodingException
*/
public static boolean downloadFile(String pathname,
String filename, String localpath) throws Exception {
boolean flag = false;
ftpClient.setControlEncoding(“GBK”);
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode(“zh”);
try {
flag = getConnect();
// 切换(定位)FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile file : ftpFiles) {
if (filename.equalsIgnoreCase(file.getName())) {
File localFile = new File(localpath + “/” + file.getName());
OutputStream os = new FileOutputStream(localFile);
//ftp服务器检索命名文件并将其写入给定的OutputStream中。
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
System.out.println(“已成功下载”);
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
/**
* 上传文件
* @param hostname ftp服务器地址
* @param port ftp服务器端口号
* @param username ftp登录账号
* @param password ftp登录密码
* @param pathname ftp服务保存地址
* @param fileName 上传到ftp的文件名
* @param inputStream 输入文件流
* @return
* @throws UnsupportedEncodingException
*/
@SuppressWarnings({ "static-access", "unused" })
public static boolean uploadFile(String pathname, String fileName,
InputStream inputStream) throws Exception {
boolean flag = false;
//解决中文乱码
ftpClient.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");
try {
flag = getConnect();
//文件类型为二进制文件
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
//创建文件目录
ftpClient.makeDirectory(pathname);
//工作路径切换
ftpClient.changeWorkingDirectory(pathname);
//上传
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
//断开和ftp服务器之间的连接
ftpClient.logout();
flag = true;
System.out.println("已成功上传");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
public static void main(String[] args) throws Exception {
//文件上传
uploadFile("/上传", "测试中文乱码.txt", new FileInputStream(new File("F:/KuGou/测试中文乱码.txt")));
//文件下载
downloadFile("/下载", "新建文本文档.txt", "F:/KuGou");
}
}