- 论坛徽章:
- 0
|
工作需求:从公司内部的ftp服务器上下载文件,要自动,定时,变换文件名。
java提供有FtpClient类,但是没有找到怎么用,失败!网上很多介绍通过enterprisedt的FtpClient类
实现,于是决定学习使用之。
从http://www.enterprisedt.com/下载 edtFTPj就可以了,有免费的呦!
安装到你想安装的目录,我是把这些东东都安装到了一个目录下,我的是c:\j2sdk1.4.2,解压拷贝就
行了
然后就是配置你的环境变量passpath,加上";c:\j2sdk1.4.2\edtFTp\....\edtftpj-1.5.3.jar"我下载
的是1.5.3版本的。
好了环境完成,开始编程,代码如下:(非常简单,高手莫笑,基本摘自自带的demo)
import java.io.IOException;
import java.util.*;
import com.enterprisedt.net.ftp.FTPClient;
import com.enterprisedt.net.ftp.FTPMessageCollector;
import com.enterprisedt.net.ftp.FTPTransferType;
import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.util.debug.Level;
import com.enterprisedt.util.debug.Logger;
import java.text.SimpleDateFormat; //载入时间格式类
/***************************************************************************
* A more complete FTP client based on sun's
*
* @version 1.0, 01/19/97, 1.1 6/11/02
* @author Elliotte Rusty Harold, extended further by M C Hill
*/
public class myFtp {
/**
* Revision control id
*/
private static String cvsId = "@(#)$Id: Demo.java,v 1.6 2005/03/18 11:12:56 bruceb Exp
$";
/**
* Log stream
*/
private static Logger log = Logger.getLogger(myFtp.class);
/**
* Standard main()
*
* @param args standard args
*/
public static void main(String[] args) {
String host = "www.ftpserver.com";
String user = "username";
String password = "×××××××××";
//Logger.setLevel(Level.ALL); // 设置debug信息是否显示,还是屏蔽了吧,好多呀。
FTPClient ftp = null;
//要获取的文件名
String filename = "雍正王朝";
//处理时间问题
long nCurrentTime = System.currentTimeMillis();
long nYellowTime ;
nYellowTime = nCurrentTime - 24*60*60*1000; //换算成毫秒后减去一天的时间。
Date utilDate = new Date(nYellowTime);
//Calendar用于获取指定的时间项(字段) 本段在此程序中没什么用,只是为了学习
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(nCurrentTime);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; //注意:返回的月份是基于0的!
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println("Current date is: " + year + "年" + month + "月" + day + "日");
System.out.println("Current time is: " + hour + "时" + minute + "分" + second + "
秒");
//SimpleDateFormat用于格式化日期和时间
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String szDatetime1 = df.format(utilDate);
System.out.println("Yellow datetime is: " + szDatetime1);
try {
// set up client
ftp = new FTPClient();
ftp.setRemoteHost(host);
ftp.setControlEncoding("GB2312"); //设置可以访问中文路径
FTPMessageCollector listener = new FTPMessageCollector();
ftp.setMessageListener(listener);
// connect
log.info("Connecting");
ftp.connect();
// login
log.info("Logging in");
ftp.login(user, password);
// set up passive BINARY transfers 设置ftp传输模式的
log.debug("Setting up passive, BINARY transfers");
ftp.setConnectMode(FTPConnectMode.PASV);
ftp.setType(FTPTransferType.BINARY);
/*// get directory and print it to console
log.debug("Directory before put:");
String[] files = ftp.dir(".", true);
for (int i = 0; i < files.length; i++)
log.debug(files);
// copy file to server
log.info("Putting file");
ftp.put("test.txt", "test.txt");
// get directory and print it to console
log.debug("Directory after put");
files = ftp.dir(".", true);
for (int i = 0; i < files.length; i++)
log.debug(files);
*/
// copy file from server
log.info("Getting file");
ftp.chdir("mov\\国产片\\雍正王朝"); //进入指定的目录
filename = filename + szDatetime1;
System.out.println("Current is: " + filename);
ftp.get(filename + ".rm" , "01.rm"); //获取指定的文件名,第一个参数是本地名,
第二个参数才是远端文件名
/*
// delete file from server
log.info("Deleting file");
ftp.delete("test.txt");
// get directory and print it to console
log.debug("Directory after delete");
files = ftp.dir("", true);
for (int i = 0; i < files.length; i++)
log.debug(files);
*/
// Shut down client
log.info("Quitting client");
ftp.quit();
String messages = listener.getLog();
log.debug("Listener log:");
log.debug(messages);
log.info("Test complete");
} catch (Exception e) {
log.error("myftp failed", e);
}
}
/**
* Basic usage statement
*/
public static void usage() {
System.out.println("Usage: Demo remotehost user password");
}
}
注:高手们都会处理异常的,我这里就姑且不顾忌那么多了。有个异常处理也是不想改了,不影响正常
的使用。
这只是简单的ftp接收功能的实现,如果需要解决上传的问题,可以查阅edtftp自带的说明。在doc\api
里。
定时功能可以通过操作系统设置,不用在程序中体现^_^。 |
|