加入依赖
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
代码
private FTPClient ftpClient = null;
/**
* 初始化ftp服务器
*/
public void initFtpClient(String host, int port, String username, String password) {
ftpClient = new FTPClient();
try {
log.info("准备连接ftp服务器:【{}】:【{}】",host,port);
//连接ftp服务器
ftpClient.connect(host, port);
//登录ftp服务器
ftpClient.login(username, password);
//是否成功登录服务器
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
log.info("ftp服务器连接失败:【{}】:【{}】",host,port);
}
log.info("ftp服务器连接成功:【{}】:【{}】",host,port);
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 上传文件
* @param host ip
* @param port 端口
* @param username 用户名
* @param password 用户密码
* @param pathname ftp服务保存地址
* @param fileName 上传到ftp的文件名
* @param originfilename 待上传文件的名称(绝对地址) *
* @return
*/
public boolean uploadFile(String host, int port, String username, String password,String pathname, String fileName,File originfilename,boolean isDelete){
boolean flag = false;
InputStream inputStream = null;
try{
log.info("开始上传文件");
// inputStream = originfilename.getInputStream();
inputStream = new FileInputStream(originfilename);
//登录ftp服务器
initFtpClient(host, port, username, password);
//这句话不加只能在服务器创建文件,但是大小始终是0
ftpClient.enterLocalPassiveMode();
//上传文件类型 二级制文件
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
//创建文件夹 拼接上当前年月日时分秒
String folder = DateUtil.format(new Date(), new SimpleDateFormat("yyyy-MM-dd"));
String currentTime = DateUtil.format(new Date(), new SimpleDateFormat("yyyyMMddHHmmssSSS"));
pathname = pathname + "/" + folder + "/" + currentTime;
createDirecroty(pathname);
//切换目录
ftpClient.changeWorkingDirectory(pathname);
//把流持久化到硬盘上
ftpClient.storeFile(new String(fileName.getBytes("GBK"),"ISO-8859-1"), inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
log.info("上传文件成功");
}catch (Exception e) {
log.error("上传文件失败");
e.printStackTrace();
}finally{
if(ftpClient.isConnected()){
try{
ftpClient.disconnect();
}catch(IOException e){
e.printStackTrace();
}
}
if(null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
/**
* 改变目录路径
* @param directory
* @return
*/
public boolean changeWorkingDirectory(String directory) {
boolean flag = true;
try {
flag = ftpClient.changeWorkingDirectory(directory);
if (flag) {
log.info("进入文件夹:【{}】成功",directory);
} else {
log.info("进入文件夹:【{}】失败!开始创建文件夹",directory);
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
return flag;
}
/**
* 创建多层目录文件,如果ftp服务器已存在该文件,则不创建,如果无,则创建
* @param remote
* @return
* @throws IOException
*/
public boolean createDirecroty(String remote) throws IOException {
boolean success = true;
String directory = remote + "/";
// 如果远程目录不存在,则递归创建远程服务器目录
if (!changeWorkingDirectory(directory)) {
int start = 0;
int end = 0;
if (directory.startsWith("/")) {
start = 1;
} else {
start = 0;
}
end = directory.indexOf("/", start);
String path = "";
StringBuilder paths = new StringBuilder();
while (true) {
String subDirectory = new String(remote.substring(start, end).getBytes("GBK"), "ISO-8859-1");
path = path + "/" + subDirectory;
if (!existFile(path)) {
if (makeDirectory(subDirectory)) {
changeWorkingDirectory(subDirectory);
} else {
log.info("创建目录【{}】",subDirectory);
changeWorkingDirectory(subDirectory);
}
} else {
changeWorkingDirectory(subDirectory);
}
paths.append("/").append(subDirectory);
start = end + 1;
end = directory.indexOf("/", start);
// 检查所有目录是否创建完毕
if (end <= start) {
break;
}
}
}
return success;
}
/**
* 判断ftp服务器文件是否存在
* @param path
* @return
* @throws IOException
*/
public boolean existFile(String path) throws IOException {
boolean flag = false;
FTPFile[] ftpFileArr = ftpClient.listFiles(path);
if (ftpFileArr.length > 0) {
flag = true;
}
return flag;
}
/**
* 创建目录
* @param dir
* @return
*/
public boolean makeDirectory(String dir) {
boolean flag = true;
try {
flag = ftpClient.makeDirectory(dir);
if (flag) {
log.info("创建文件夹:【{}】成功",dir);
} else {
log.info("创建文件夹:【{}】失败",dir);
}
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
网友评论