ftpjar包下载:http://download.csdn.net/detail/lgq_0714/4216449
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- 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;
- import sun.net.TelnetOutputStream;
- import sun.net.ftp.FtpClient;
- /**
- * @author Administrator
- * @version 1.0
- * @date 2012-3-12
- * @class_displayName FTPUtils
- */
- public class FTPUtils {
- /**
- * Description: 向FTP服务器上传文件 通过sun的FtpClient实现上传(为了解决中文文件乱码问题)
- * @param url FTP服务器IP地址
- * @param port FTP服务器端口
- * @param username FTP登录账号
- * @param password FTP登录密码
- * @param path FTP服务器保存目录
- * @param originalFileName 原始文件名
- * @param ftpFileName 上传到FTP服务器上的文件名
- * @return 成功返回true,否则返回false
- */
- public static boolean uploadFile(String server, int port, String user,
- String password, String path, String originalFileName,
- String ftpFileName) {
- boolean success = false;
- FtpClient ftpClient;
- try {
- ftpClient = new FtpClient();
- ftpClient.openServer(server,port);
- ftpClient.login(user, password);
- System.out.println("Login .......");
- // path是ftp服务下主目录的子目录
- if (path.length() != 0)
- ftpClient.cd(path);
- // 用2进制上传,防止上传中文文件乱码
- ftpClient.binary();
- TelnetOutputStream os = null;
- FileInputStream is = null;
- os = ftpClient.put(ftpFileName);
- File file_in = new File(originalFileName);
- if (file_in.length() == 0) {
- throw new Exception("上传文件为空!");
- }
- is = new FileInputStream(file_in);
- byte[] bytes = new byte[1024];
- int c;
- while ((c = is.read(bytes)) != -1) {
- os.write(bytes, 0, c);
- }
- is.close();
- os.close();
- success = true;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return success;
- }
- /**
- * Description: 从FTP服务器下载文件 通过Apache的FTPClient实现文件的下载
- *
- * @param ip FTP服务器的ip地址
- * @param port FTP服务器端口,默认为:21
- * @param username FTP登录账号
- * @param password FTP登录密码
- * @param remotePath FTP服务器上的相对路径
- * @param fileName 要下载的文件名
- * @param localPath 下载后保存到本地的路径
- * @return
- */
- public static boolean downloadFile(String ip, int port, String username,
- String password, String remotePath, String fileName,
- String localPath) {
- boolean success = false;
- FTPClient ftp = new FTPClient();
- try {
- int reply;
- ftp.connect(ip, port);
- // 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件
- ftp.setControlEncoding("GBK");
- FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
- conf.setServerLanguageCode("zh");
- // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
- ftp.login(username, password);// 登录
- reply = ftp.getReplyCode();
- if (!FTPReply.isPositiveCompletion(reply)) {
- ftp.disconnect();
- return success;
- }
- ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
- FTPFile[] fs = ftp.listFiles();
- for (int i = 0; i < fs.length; i++) {
- FTPFile ff = fs[i];
- if (!ff.getName().equals(".") && !ff.getName().equals("..")) {
- File localFile = new File(localPath + File.separator
- + ff.getName());
- if(!localFile.exists())//如果文件已存在则不重复下载
- {
- OutputStream is = new FileOutputStream(localFile);
- // 注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。
- // 原因可能是由于aix系统默认的编码为ISO-8859-1
- ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),
- "ISO-8859-1"), is);
- is.close();
- }
- }
- }
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("------------------end:"+dateFormat.format(new Date())+"-----------------------------------");
- ftp.logout();
- success = true;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (ftp.isConnected()) {
- try {
- ftp.disconnect();
- } catch (Exception ioe) {
- ioe.printStackTrace();
- }
- }
- }
- return success;
- }
- public static void main(String[] args) {
- try {
- downloadFile("192.168.103.215", 21, "servu", "111111",
- "D:/ftpserv", "测试.xls", "C:/primeton2012/jakarta-tomcat-5.0.28/upload/FEEDBACK_INFO");
- // server:FTP服务器的IP地址
- String server = "192.168.103.215";
- // user:登录FTP服务器的用户名
- String user = "servu";
- // password:登录FTP服务器的用户名的口令
- String password = "111111";
- // path:FTP服务器上的路径
- String path = "D:/ftpserv";
- // 要上传本地文件路径
- String originalFileName = "F://Web//Web//src//测试.xls";
- // 上传服务器上文件名
- String ftpFileName = "测试2012-3-12-植树节-.xls";
- uploadFile(server, 21, user, password, path, originalFileName, ftpFileName);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }