|
http://lavasoft.blog.iyunv.com/62575/93883/
Java FTP客户端工具包很多,在此我选用的Apache的FTPClient。这个包的获取可以通过http://commons.apache.org/net/来获取,我使用的是最新的commons-net-1.4.1.zip。其中包含了众多的java网络编程的工具包,官方文档列举如下:
支持网络协议如下:
FTP
NNTP
SMTP
POP3
Telnet
TFTP
Finger
Whois
rexec/rcmd/rlogin
Time (rdate) and Daytime
Echo
Discard
NTP/SNTP
都很有用。在此我用到的是FTP相关的一些包。
public class FtpTest {
public static void main(String[] args) {
testUpload();
testDownload();
}
/**
* FTP上传单个文件测试
*/
public static void testUpload() {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
try {
ftpClient.connect("192.168.14.117");
ftpClient.login("admin", "123");
File srcFile = new File("C:\\new.gif");
fis = new FileInputStream(srcFile);
//设置上传目录
ftpClient.changeWorkingDirectory("/admin/pic");
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("3.gif", fis);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
/**
* FTP下载单个文件测试
*/
public static void testDownload() {
FTPClient ftpClient = new FTPClient();
FileOutputStream fos = null;
try {
ftpClient.connect("192.168.14.117");
ftpClient.login("admin", "123");
String remoteFileName = "/admin/pic/3.gif";
fos = new FileOutputStream("c:/down.gif");
ftpClient.setBufferSize(1024);
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(remoteFileName, fos);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
}
public class Ftp {
private static final Logger logger = Logger.getLogger(FTP.class);
/**
* FTP客户端
*/
private FtpClient ftpClient;
/**
* 服务器连接
*
* @param ip
* 服务器IP
* @param port
* 服务器端口
* @param user
* 用户名
* @param password
* 密码
* @param path
* 服务器路径
* @throws IOException
*
*/
public void connectServer(String ip, int port, String user, String password, String path) throws IOException {
try {
System.out.println("ftp connect...");
ftpClient = new FtpClient(ip);
ftpClient.login(user, password);
// 设置成2进制传输
ftpClient.binary();
System.out.println("ftp login success!");
if (path.length() != 0) {
// 把远程系统上的目录切换到参数path所指定的目录
try {
ftpClient.cd(path);
} catch (Exception e) {
throw new IOException("FTP server: 550 CWD failed 远程目录未响应", e);
}
}
ftpClient.binary();
} catch (IOException e) {
logger.error("ftp connect err!");
logger.error(e.getMessage());
e.printStackTrace();
throw new IOException(e.getMessage());
}
}
/**
* 关闭连接
*
*
*/
public void closeConnect() {
try {
ftpClient.closeServer();
System.out.println("closeConnect success");
} catch (IOException ex) {
System.out.println("not closeConnect");
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
/**
* 上传文件
*
* @param localFile
* 本地文件
* @param remoteFile
* 远程文件
*
*/
public void upload(String localFile, String remoteFile) {
TelnetOutputStream os = null;
FileInputStream is = null;
try {
// 将远程文件加入输出流中
os = ftpClient.put(remoteFile);
// 获取本地文件的输入流
File file_in = new File(localFile);
is = new FileInputStream(file_in);
// 创建一个缓冲区
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
System.out.println("upload success");
} catch (IOException ex) {
System.out.println("not upload");
ex.printStackTrace();
throw new RuntimeException(ex);
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 下载文件
*
* @param remoteFile
* 远程文件路径(服务器端)
* @param localFile
* 本地文件路径(客户端)
*
*/
public void download(String remoteFile, String localFile) {
TelnetInputStream is = null;
FileOutputStream os = null;
try {
// 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
is = ftpClient.get(remoteFile);
File file_in = new File(localFile);
os = new FileOutputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
System.out.println("download success");
} catch (IOException ex) {
System.out.println("not download");
ex.printStackTrace();
throw new RuntimeException(ex);
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 返回FTP目录下的文件列表
*
* @param ftpDirectory
* @return
*/
public List<String> getFileNameList(String ftpDirectory) {
List<String> list = new ArrayList<String>();
BufferedReader bf = null;
InputStreamReader isr = null;
DataInputStream ds = null;
try {
ds = new DataInputStream(ftpClient.nameList(ftpDirectory));
isr = new InputStreamReader(ds);
bf = new BufferedReader(isr);
String filename = "";
while ((filename = bf.readLine()) != null) {
list.add(filename);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
bf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
public static void main(String agrs[]) throws Exception {
Ftp ftp = new Ftp();
ftp.connectServer("192.168.1.221", 21, "admin", "123@123", "/FTP Files/temp");
List<String> list = ftp.getFileNameList("/FTP Files/temp");
for (String str : list) {
try {
Calendar cal = Calendar.getInstance();// 使用日历类
int year = cal.get(Calendar.YEAR);// 得到年
int month = cal.get(Calendar.MONTH) + 1;// 得到月,因为从0开始的,所以要加1
int day = cal.get(Calendar.DAY_OF_MONTH);// 得到天
String fileName = "WiMAX_" + year + month + day;
System.out.println("str" + str + "---------" + "fileName:" + fileName);
String regEx = "WiMAX_\\d{8}_\\d{5}_\\s{5}"; // 表示a或F
Pattern pat = Pattern.compile(regEx);
System.out.println(pat.matcher(str).find());
// if (str.contains(fileName)) {
// fu.download("/FTP Files/temp/" + str, "d:/temp/" + str);
// System.out.println("download:" + str);
// }
} catch (Exception e) {
e.printStackTrace();
logger.error(e.getMessage());
throw e;
}
}
ftp.closeConnect();
}
}
View Code
版权声明:本文为博主原创文章,未经博主允许不得转载。 |
|
|