package ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
/**
* 使用FTP协议向服务器上传、下载文件
* @author 丑哥最风骚
* @date 2014-04-02
*/
public class FtpUtil {
public final static String URL = "10.8.8.202"; // FTP服务器地址
public final static String USERNAME = "admin"; // 登录FTP服务器账号
public final static String PASSWORD = "123"; // 登陆FTP服务器密码
public final static String UPLOADDIR = "/admin/upload"; // 上传文件目录
public final static String DOWNLOADDIR = "/admin/download"; // 下载文件目录
public final static String ENCODING = "UTF-8"; // 文件编码方式
public final static int FILETYPE = FTPClient.BINARY_FILE_TYPE; // 文件类型(二进制)
public final static int BUFFERSIZE = 1024; // 缓冲区大小
/**
* 上传文件到FTP服务器
* @return
*/
public static boolean doUpload() {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
boolean result = true;
try {
ftpClient.connect(URL);
// ftpClient.connect(host, port); 有端口号的连接
ftpClient.login(USERNAME, PASSWORD);
File srcFile = new File("F:/myStudy/svn-eclipse-site-1.6.10.rar"); // 本地即将上传的文件
fis = new FileInputStream(srcFile);
ftpClient.changeWorkingDirectory(UPLOADDIR);
ftpClient.setBufferSize(BUFFERSIZE);
ftpClient.setControlEncoding(ENCODING);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("001.rar", fis);
} catch (IOException e) {
result = false;
e.printStackTrace();
} finally {
// 关闭连接
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 从FTP服务器中下载文件
* @return
*/
public static boolean doDownload() {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
boolean result = true;
try {
ftpClient.connect(URL);
// ftpClient.connect(host, port); 有端口号的连接
ftpClient.login(USERNAME, PASSWORD);
String remoteFileName = "/admin/upload/001.rar"; // FTP服务器要被下载的文件
fos = new FileOutputStream("F:/myStudy/ftp/002.rar"); // 下载后在本地生成的文件
ftpClient.setBufferSize(BUFFERSIZE);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(remoteFileName, fos);
} catch (IOException e) {
result = false;
e.printStackTrace();
} finally {
// 关闭连接
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
boolean result = doUpload();
int count = 0;
while(!result && 3 > count) { // 如果失败,则最多再尝试3次
count ++;
result = doUpload();
}
}
}
package com.whty.ftp;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Properties;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
/**
* 使用FTP协议向服务器上传、下载文件
* @author 丑哥最风骚
* @date 2014-04-02
*/
public class FtpUtil {
private static Properties ftpProperties = null;
static{
InputStream is = FtpUtil.class.getResourceAsStream("/properties/ftp.properties");
ftpProperties = new Properties();
try {
ftpProperties.load(is);
} catch (IOException e1) {
e1.printStackTrace();
}
}
public static String URL = ftpProperties.getProperty("URL"); // FTP服务器地址
public static int PORT = Integer.parseInt(ftpProperties.getProperty("PORT")); // FTP服务器端口号
public static String USERNAME = ftpProperties.getProperty("USERNAME"); // 登录FTP服务器账号
public static String PASSWORD = ftpProperties.getProperty("PASSWORD"); // 登陆FTP服务器密码
public static String UPLOADDIR = ftpProperties.getProperty("UPLOADDIR"); // 上传文件目录
public static String DOWNLOADDIR = ftpProperties.getProperty("DOWNLOADDIR"); // 下载文件目录
public static String ENCODING = "UTF-8"; // 文件编码方式
public static int FILETYPE = FTPClient.BINARY_FILE_TYPE; // 文件类型(二进制)
public static int BUFFERSIZE = 1024; // 缓冲区大小
/**
* 获取自身服务器存放与FTP相关文件的路径
* @return
*/
public static String getLocalFtpDirPath() {
String dir = Thread.currentThread().getContextClassLoader().getResource("").getPath();
String ftpDir = dir.split("WEB-INF")[0] + "ftp/";
ftpDir.replace("/", File.separator);
File file = new File(ftpDir);
if(!file.exists()) {
file.mkdirs();
}
return ftpDir;
}
/**
* 从FTP服务器中拷贝文件到本地
* @return
*/
public static boolean doDownload() {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
boolean result = true;
try {
// 登录FTP服务器
ftpClient.connect(URL);
// ftpClient.connect(host, port);
ftpClient.login(USERNAME, PASSWORD);
// 把FTP服务器指定目录下符合条件的文件筛选出来
List<String> fileNameList = new ArrayList<String>();
String fileName = "";
if(DOWNLOADDIR.startsWith("/") && DOWNLOADDIR.endsWith("/")){
ftpClient.changeWorkingDirectory(DOWNLOADDIR);
FTPFile[] files = ftpClient.listFiles();
for(FTPFile file : files) {
if(file.isFile()) {
fileName = file.getName();
System.out.println("fileName = " + fileName);
String createDateStr = (fileName.split("_")[1]).split("\\.")[0];
if(checkCreateTime(createDateStr)) {
fileNameList.add(fileName);
}
}
}
}
// 把符合条件的文件下载到本地
String remoteFileName = ""; // FTP服务器要被下载的文件(路径加文件名)
String localFileName = ""; // 下载后在本地生成的文件(路径加文件名)
for(int i=0; i<fileNameList.size(); i++) {
fileName = fileNameList.get(i);
remoteFileName = DOWNLOADDIR + fileName;
localFileName = getLocalFtpDirPath() + fileName;
fos = new FileOutputStream(localFileName);
ftpClient.setBufferSize(BUFFERSIZE);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(remoteFileName, fos);
}
} catch (Exception e) {
result = false;
e.printStackTrace();
} finally {
// 关闭连接
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
/**
* 给一个时间,判断是否为今天
* @param createDateStr
* @return
*/
public static boolean checkCreateTime(String createDateStr) {
boolean result = true;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
long createTime = sdf.parse(createDateStr).getTime();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
long time1 = cal.getTimeInMillis();
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
long time2 = cal.getTimeInMillis();
if(time1 < createTime && time2 > createTime) {
result = true;
} else {
result = false;
}
} catch(Exception e) {
e.printStackTrace();
result = false;
}
return result;
}
}