FTP上传和下载文件

来源:互联网 发布:java base64 中文乱码 编辑:程序博客网 时间:2024/05/16 07:03



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;}}



0 0