您的位置:首页 > 编程语言 > Java开发

java连接FTP、删除、下载文件的方法

2014-09-07 11:23 309 查看
本文共例举了二个连接FTP的方法,可以下载删除FTP上的文件,代码有点凌乱

JAVA自带的方法

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;

/*
* Copyright (C) 2011-2014 dshine.com
* All rights reserved.
*/
/**
* @author
Wiker Yong Email:<a href="mailto:wikeryong@gmail.com">wikeryong@gmail.com</a>
* @date 2014-8-19
下午2:00:58
* @version 1.0-SNAPSHOT
*/
publicclassJavaFtpClient{
privateStringip="";
privateStringusername="";
privateStringpassword="";
privateintport=-1;
privateStringpath="";
FtpClientftpClient=null;
OutputStreamos=null;
FileInputStreamis=null;
staticStringcurFolder=System.getProperty("user.dir");
privatefinalstaticLogger
log =Logger.getLogger(JavaFtpClient.class);

// LogInfologinfo = new LogInfo();

publicJavaFtpClient(String
serverIP,String username,String password){
this.ip= serverIP;
this.username=
username;
this.password=
password;
}

publicJavaFtpClient(String
serverIP,int port,String username,String
password){
this.ip= serverIP;
this.username=
username;
this.password=
password;
this.port= port;
}

publicvoidsetPath(String
path)
throws IOException
{
if(ftpClient==null){
this.path=
path;
}else{
ftpClient.cd(path);
}
}

/**
* 连接ftp服务器
*
* @throws IOException
*/
publicbooleanconnectServer(){
if(ftpClient!=null){
returntrue;
}
ftpClient=newFtpClient();
try{
if(this.port!=-1){
ftpClient.openServer(this.ip,this.port);
}else{
ftpClient.openServer(this.ip);
}
ftpClient.login(this.username,this.password);
if(this.path.length()!=0){
ftpClient.cd(this.path);//
path是ftp服务下主目录的子目录
}
ftpClient.binary();//
用2进制上传、下载
log.info("FTP
已登录到\""+ftpClient.pwd()+"\"目录");
// loginfo.appendLog("FTP
已登录到\"" + ftpClient.pwd() + "\"目录");

returntrue;
}catch(IOException
e){
log.error(e.getMessage(),
e);
returnfalse;
}
}

/**
* 断开与ftp服务器连接
*
* @throws IOException
*/
publicbooleancloseServer(){
try{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
if(ftpClient!=null){
ftpClient.closeServer();
}
log.info("已从服务器断开");
// loginfo.appendLog("已从服务器断开");
returntrue;
}catch(IOException
e){
e.printStackTrace();
returnfalse;
}
}

/**
* 检查文件夹在当前目录下是否存在
*
* @param dir
* @return
*/
publicbooleanisDirExist(String
dir){
String pwd
="";
try{
pwd =ftpClient.pwd();
ftpClient.cd(dir);
ftpClient.cd(pwd);
}catch(Exception
e){
returnfalse;
}
returntrue;
}

publicbooleanrename(String
str1,String str2)
throws IOException
{
String
file1 ="";
String file2
="";
String
folder1 ="";
String folder2
="";
file1 = str1.substring(str1.lastIndexOf("/")+1,
str1.length());
file2 = str2.substring(str2.lastIndexOf("/")+1,
str2.length());
folder1 = str1.substring(0,
str1.lastIndexOf("/")+1);
folder2 = str2.substring(0,
str2.lastIndexOf("/")+1);
if(!isDirExist(folder2)){
createDir(folder2);
}
ftpClient.rename(str1,
str2);
List l
=this.getFileList(folder2);
for(int i
=0; i
< l.size(); i++){
if(l.get(i).toString().indexOf(file2)>0){
returntrue;
}
}
returnfalse;
}

publicvoidsendCMD(String
cmd)
throws IOException
{
ftpClient.sendServer(cmd);
log.info(cmd.replaceAll("\r\n","\\\\r\\\\n"));
int reply
=ftpClient.readServerResponse();
log.info("Server Response:"+
reply);
// log.info(reply);
}

/**
* 在当前目录下创建文件夹
*
* @param dir
* @return
* @throws Exception
*/
privatebooleancreateDir(String
dir){
try{
ftpClient.ascii();
StringTokenizer s
=newStringTokenizer(dir,"/");//
sign
s.countTokens();
String pathName
="";//ftpClient.pwd();
while(s.hasMoreElements()){
pathName = pathName
+"/"+(String)
s.nextElement();
if(this.isDirExist(pathName)){
continue;
}
try{
ftpClient.sendServer("MKD
"+ pathName
+"\r\n");
}catch(Exception
e){
e =null;
returnfalse;
}
ftpClient.readServerResponse();
}
ftpClient.binary();
returntrue;
}catch(IOException
e1){
e1.printStackTrace();
returnfalse;
}
}

/**
* ftp上传如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*
* @param filename
* 要上传的文件(或文件夹)名
* @return
* @throws Exception
*/
publicbooleanupload(String
filename){
String newname
="";
if(filename.indexOf("/")>-1){
newname = filename.substring(filename.lastIndexOf("/")+1);
}else{
newname = filename;
}
returnupload(filename,
newname);
}

/**
* ftp上传如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*
* @param fileName
* 要上传的文件(或文件夹)名
* @param newName
* 服务器段要生成的文件(或文件夹)名
* @return
*/
publicbooleanupload(String
fileName,String newName){
try{
String savefilename
=newString(fileName.getBytes("ISO-8859-1"),"GBK");
File file_in
=newFile(savefilename);//
打开本地待长传的文件
if(!file_in.exists()){
thrownewException("此文件或文件夹["+
file_in.getName()+"]有误或不存在!");
}
if(file_in.isDirectory()){
upload(file_in.getPath(),
newName,ftpClient.pwd());
}else{
uploadFile(file_in.getPath(),
newName);
}

if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
returntrue;
}catch(Exception
e){
e.printStackTrace();
System.err.println("Exception
ein Ftp upload(): "+ e.toString());
returnfalse;
}finally{
try{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
}catch(IOException
e){
e.printStackTrace();
}
}
}

/**
* 真正用于上传的方法
*
* @param fileName
* @param newName
* @param path
* @throws Exception
*/
privatevoidupload(String
fileName,String newName,String path)
throws Exception
{
String savefilename
=newString(fileName.getBytes("ISO-8859-1"),"GBK");
File file_in
=newFile(savefilename);//
打开本地待长传的文件
if(!file_in.exists()){
thrownewException("此文件或文件夹["+
file_in.getName()+"]有误或不存在!");
}
if(file_in.isDirectory()){
if(!isDirExist(newName)){
createDir(newName);
}
ftpClient.cd(newName);
File sourceFile[]= file_in.listFiles();
for(int i
=0; i
< sourceFile.length; i++){
if(!sourceFile[i].exists()){
continue;
}
if(sourceFile[i].isDirectory()){
this.upload(sourceFile[i].getPath(),
sourceFile[i].getName(), path
+"/"
+ newName);
}else{
this.uploadFile(sourceFile[i].getPath(),
sourceFile[i].getName());
}
}
}else{
uploadFile(file_in.getPath(),
newName);
}
ftpClient.cd(path);
}

/**
* upload 上传文件
*
* @param filename
* 要上传的文件名
* @param newname
* 上传后的新文件名
* @return-1
文件不存在 >=0
成功上传,返回文件的大小
* @throws Exception
*/
publiclonguploadFile(String
filename,String newname)
throws Exception
{
long result
=0;
TelnetOutputStream os
=null;
FileInputStream is
=null;
try{
java.io.File file_in
=new java.io.File(filename);
if(!file_in.exists()){
return-1;
}
os =ftpClient.put(newname);
result = file_in.length();
is =newFileInputStream(file_in);
byte[] bytes
=newbyte[1024];
int c;
while((c
= is.read(bytes))!=-1){
os.write(bytes,0,
c);
}
}finally{
if(is
!=null){
is.close();
}
if(os
!=null){
os.close();
}
}
return result;
}

/**
* 从ftp下载文件到本地
*
* @param filename
* 服务器上的文件名
* @param newfilename
* 本地生成的文件名
* @return
* @throws Exception
*/
publiclongdownloadFile(String
filename,String newfilename){
long result
=0;
TelnetInputStream is
=null;
FileOutputStream os
=null;
try{
is =ftpClient.get(filename);
java.io.File outfile
=new java.io.File(newfilename);
log.info("Download File:"+
outfile.getPath());
os =newFileOutputStream(outfile);
byte[] bytes
=newbyte[1024];
int c;
while((c
= is.read(bytes))!=-1){
os.write(bytes,0,
c);
result = result
+ c;
}
}catch(IOException
e){
e.printStackTrace();
}finally{
try{
if(is
!=null){
is.close();
}
if(os
!=null){
os.close();
}
}catch(IOException
e){
e.printStackTrace();
}
}
return result;
}

/**
* 取得相对于当前连接目录的某个目录下所有文件列表
*
* @param path
* @return
*/
publicListgetFileList(String
path){
List list
=newArrayList();
DataInputStream dis;
try{
log.info(this.path+
path);
dis =newDataInputStream(ftpClient.nameList(this.path+
path));
String filename
="";
while((filename
= dis.readLine())!=null){
String sfilename
=newString(filename.getBytes("ISO-8859-1"),"utf-8");
list.add(sfilename);
}
}catch(IOException
e){
e.printStackTrace();
}
return list;
}

publicstaticvoidmain(String[]
args)
throws IOException
{
workPath=JavaFtpClient.class.getClass().getResource("/").getPath();
String tempFolder
= getPropertiesValueByKey(workPath+"/application.properties",
"download.path");
File file
=newFile(tempFolder);
if(!file.exists()){
file.mkdir();
}
String ftpIp
= getPropertiesValueByKey(workPath+"/application.properties","ftp.ip");
String port
= getPropertiesValueByKey(workPath+"/application.properties","ftp.port");
String user
= getPropertiesValueByKey(workPath+"/application.properties","ftp.user");
String password
= getPropertiesValueByKey(workPath+"/application.properties",
"ftp.password");
String sleep
= getPropertiesValueByKey(workPath+"/application.properties","sleep.time");
sleep =StringUtils.defaultIfEmpty(sleep,"3600");

while(true){
JavaFtpClient ftp
=newJavaFtpClient(ftpIp,Integer.valueOf(port),
user, password);
ftp.setPath("/");
ftp.connectServer();

// boolean result = ftp.upload("D:/4500000436.XML", "/sapinstall/MMIWM/4500000436.XML");
// log.info(result ? "上传成功!" : "上传失败!");

List list
= ftp.getFileList("/");
for(int i
=0; i
< list.size(); i++){
// String name = newString(list.get(i).toString().getBytes("UTF-8"), "iso-8859-1");
String name
= list.get(i).toString();
// log.info(name);
if(!ftp.isDirExist(name)){
ftp.downloadFile(
name,
tempFolder
+"\\"

+ name.substring(name.lastIndexOf("/")+1,
name.length()));
ftp.sendCMD("DELE "+
name.substring(name.lastIndexOf("/")+1,
name.length())
+"\r\n");
}
}
ftp.closeServer();
try{
log.info("休眠
"+ sleep
+" 秒");
Thread.sleep(Integer.valueOf(sleep)*1000);
}catch(NumberFormatException
e){
//
TODO Auto-generated catch block
e.printStackTrace();
}catch(InterruptedException
e){
//
TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* FTP远程命令列表 USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASVSTOR
* REST CWD STAT RMD XCUP OPTS ACCTTYPE APPE RNFR XCWD HELP XRMD STOU
* AUTH REIN STRU SMNT RNTO LIST NOOPPWD SIZE PBSZ QUIT MODE SYST ABOR
* NLST MKD XPWD MDTM PROT
* 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n
* ftpclient.sendServer("XMKD/test/bb\r\n"); //执行服务器上的FTP命令
* ftpclient.readServerResponse一定要在sendServer后调用
* nameList("/test")获取指目录下的文件列表 XMKD建立目录,当目录存在的情况下再次创建目录时报错 XRMD删除目录
* DELE删除文件
*/
}

staticStringworkPath=null;

publicstaticStringgetPropertiesValueByKey(String
fileName,String key){
Properties p
=newProperties();
String value
="";
try{
InputStream in
=newBufferedInputStream(newFileInputStream(fileName));
p.load(in);
value = p.getProperty(key);
}catch(Exception
e){
e.printStackTrace();
return"";
}
return value;
}

}

Apache库的方法

需要依赖commons-net-3.1.jar库可以apache官方下载

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import
java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import
java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import java.util.StringTokenizer;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.log4j.Logger;

/*
* Copyright (C) 2011-2014 dshine.com
* All rights reserved.
* ShangHai Dshine -http://www.dshine.com
*/
/**
* @author
Wiker Yong Email:<a href="mailto:wikeryong@gmail.com">wikeryong@gmail.com</a>
* @date 2014-8-19
下午2:00:58
* @version 1.0-SNAPSHOT
*/
publicclassApacheFtpClient{
privateStringip="";
privateStringusername="";
privateStringpassword="";
privateintport=-1;
privateStringpath="";
FTPClientftpClient=null;
OutputStreamos=null;
FileInputStreamis=null;
staticStringcurFolder=System.getProperty("user.dir");
privatefinalstaticLogger
log =Logger.getLogger(ApacheFtpClient.class);

// LogInfologinfo = new LogInfo();

publicApacheFtpClient(String
serverIP,String username,String password){
this.ip= serverIP;
this.username=
username;
this.password=
password;
}

publicApacheFtpClient(String
serverIP,int port,String username,String
password){
this.ip= serverIP;
this.username=
username;
this.password=
password;
this.port= port;
}

publicvoidsetPath(String
path)
throws IOException
{
if(ftpClient==null){
this.path=
path;
}else{
ftpClient.cwd(path);
}
}

/**
* 连接ftp服务器
*
* @throws IOException
*/
publicbooleanconnectServer(){
if(ftpClient!=null){
returntrue;
}
ftpClient=newFTPClient();
try{
if(this.port!=-1){
ftpClient.connect(this.ip,this.port);
}else{
ftpClient.connect(this.ip);
}
ftpClient.setControlEncoding("UTF-8");
ftpClient.login(this.username,this.password);
if(this.path.length()!=0){
ftpClient.cwd(this.path);//
path是ftp服务下主目录的子目录
}
//ftpClient.binary();//
用2进制上传、下载
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
log.info("FTP
已登录到\""+ftpClient.pwd()+"\"目录");
// loginfo.appendLog("FTP
已登录到\"" + ftpClient.pwd() + "\"目录");

returntrue;
}catch(IOException
e){
log.error(e.getMessage(),
e);
returnfalse;
}
}

/**
* 断开与ftp服务器连接
*
* @throws IOException
*/
publicbooleancloseServer(){
try{
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
if(ftpClient!=null){
ftpClient.disconnect();
}
log.info("已从服务器断开");
// loginfo.appendLog("已从服务器断开");
returntrue;
}catch(IOException
e){
e.printStackTrace();
returnfalse;
}
}

/**
* 检查文件夹在当前目录下是否存在
*
* @param dir
* @return
*/
publicbooleanisDirExist(String
dir){
String pwd
="";
try{
//pwd = ftpClient.pwd();
ftpClient.cwd(dir);
ftpClient.cwd(pwd);
}catch(Exception
e){
returnfalse;
}
returntrue;
}

// public boolean rename(String str1, Stringstr2)
// throws IOException {
// String file1 = "";
// String file2 = "";
// String folder1 = "";
// String folder2 = "";
// file1 =str1.substring(str1.lastIndexOf("/") + 1, str1.length());
// file2 =str2.substring(str2.lastIndexOf("/") + 1, str2.length());
// folder1 = str1.substring(0,str1.lastIndexOf("/") + 1);
// folder2 = str2.substring(0, str2.lastIndexOf("/")+ 1);
// if (!isDirExist(folder2)) {
// createDir(folder2);
// }
// ftpClient.rename(str1, str2);
// List l = this.getFileList(folder2);
// for (int i = 0; i < l.size();i++) {
// if(l.get(i).toString().indexOf(file2) > 0) {
// return true;
// }
// }
// return false;
// }

publicvoidsendCMD(String
cmd)
throws IOException
{
ftpClient.sendCommand(cmd);
log.info(cmd.replaceAll("\r\n","\\\\r\\\\n"));
int reply
=ftpClient.getReply();
log.info("Server Response:"+
reply);
// log.info(reply);
}

/**
* 在当前目录下创建文件夹
*
* @param dir
* @return
* @throws Exception
*/
privatebooleancreateDir(String
dir)
{
try{
ftpClient.setFileTransferMode(FTP.ASCII_FILE_TYPE);
StringTokenizer s
=newStringTokenizer(dir,"/");//
sign
s.countTokens();
String pathName
="";//ftpClient.pwd();
while(s.hasMoreElements()){
pathName = pathName
+"/"+(String)
s.nextElement();
if(this.isDirExist(pathName)){
continue;
}
try{
ftpClient.sendCommand("MKD
"+ pathName
+"\r\n");
}catch(Exception
e){
e =null;
returnfalse;
}
ftpClient.getReply();
}
ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE);
returntrue;
}catch(IOException
e1){
e1.printStackTrace();
returnfalse;
}
}

/**
* ftp上传如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*
* @param filename
* 要上传的文件(或文件夹)名
* @return
* @throws Exception
*/
/*publicboolean upload(String filename) {
String newname = "";
if (filename.indexOf("/")> -1) {
newname =filename.substring(filename.lastIndexOf("/") + 1);
} else {
newname = filename;
}
return upload(filename, newname);
}*/

/**
* ftp上传如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换
*
* @param fileName
* 要上传的文件(或文件夹)名
* @param newName
* 服务器段要生成的文件(或文件夹)名
* @return
*/
/*publicboolean upload(String fileName, String newName) {
try {
String savefilename = newString(fileName.getBytes("ISO-8859-1"), "GBK");
File file_in = new File(savefilename);//打开本地待长传的文件
if (!file_in.exists()) {
throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
}
if (file_in.isDirectory()) {
upload(file_in.getPath(),newName, ftpClient.pwd());
} else {
uploadFile(file_in.getPath(),newName);
}

if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
return true;
} catch (Exception e) {
e.printStackTrace();
System.err.println("Exceptione in
Ftp upload(): " + e.toString());
return false;
} finally {
try {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}*/

/**
* 真正用于上传的方法
*
* @param fileName
* @param newName
* @param path
* @throws Exception
*/
/*privatevoid upload(String fileName, String newName, String path)
throws Exception {
String savefilename = newString(fileName.getBytes("ISO-8859-1"), "GBK");
File file_in = new File(savefilename);//打开本地待长传的文件
if (!file_in.exists()) {
throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");
}
if (file_in.isDirectory()) {
if (!isDirExist(newName)) {
createDir(newName);
}
ftpClient.cwd(newName);
File sourceFile[] =file_in.listFiles();
for (int i = 0; i <sourceFile.length; i++) {
if (!sourceFile[i].exists()) {
continue;
}
if(sourceFile[i].isDirectory()) {
this.upload(sourceFile[i].getPath(), sourceFile[i].getName(), path +"/"
+ newName);
} else {
this.uploadFile(sourceFile[i].getPath(), sourceFile[i].getName());
}
}
} else {
uploadFile(file_in.getPath(),newName);
}
ftpClient.cwd(path);
}*/

/**
* upload 上传文件
*
* @param filename
* 要上传的文件名
* @param newname
* 上传后的新文件名
* @return-1
文件不存在 >=0
成功上传,返回文件的大小
* @throws Exception
*/
/*publiclong uploadFile(String filename, String
newname)
throws Exception {
long result = 0;
TelnetOutputStream os = null;
FileInputStream is = null;
try {
java.io.File file_in = newjava.io.File(filename);
if (!file_in.exists()) {
return -1;
}
os = ftpClient.put(newname);
result = file_in.length();
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1){
os.write(bytes, 0, c);
}
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
return result;
}*/

/**
* 从ftp下载文件到本地
*
* @param filename
* 服务器上的文件名
* @param newfilename
* 本地生成的文件名
* @return
* @throws Exception
*/
publicbooleandownloadFile(String
filename,String newfilename){
long result
=0;
InputStream is
=null;
FileOutputStream os
=null;
try{
filename =newString(filename.getBytes("UTF-8"),"ISO-8859-1");
is =ftpClient.retrieveFileStream(filename);
java.io.File outfile
=new java.io.File(newfilename);
if(!outfile.getParentFile().exists()){
outfile.getParentFile().mkdirs();
}
log.info("Download File:"+
outfile.getPath());
os =newFileOutputStream(outfile);
byte[] bytes
=newbyte[1024];
int c;
while((c
= is.read(bytes))!=-1){
os.write(bytes,0,
c);
result = result
+ c;
}
returnftpClient.completePendingCommand();
}catch(IOException
e){
log.error(e.getMessage(),
e);
}finally{
try{
if(is
!=null){
is.close();
}
if(os
!=null){
os.close();
}
}catch(IOException
e){
log.error(e.getMessage(),
e);
}
}
returnfalse;
}

/**
* 取得相对于当前连接目录的某个目录下所有文件列表
*
* @param path
* @return
*/
/* publicList getFileList(String path) {
List list = new ArrayList();
DataInputStream dis;
try {
log.info(this.path + path);
dis = newDataInputStream(ftpClient.li.nameList(this.path + path));
String filename = "";
while ((filename = dis.readLine())!= null) {
String sfilename = newString(filename.getBytes("ISO-8859-1"), "utf-8");
list.add(sfilename);
}
} catch (IOException e) {
e.printStackTrace();
}
return list;
}*/

publicstaticvoidmain(String[]
args)
throws IOException
{
workPath=ApacheFtpClient.class.getClass().getResource("/").getPath();
String tempFolder
= getPropertiesValueByKey(workPath+"/application.properties",
"download.path");
File file
=newFile(tempFolder);
if(!file.exists()){
file.mkdir();
}
String ftpIp
= getPropertiesValueByKey(workPath+"/application.properties","ftp.ip");
String port
= getPropertiesValueByKey(workPath+"/application.properties","ftp.port");
String user
= getPropertiesValueByKey(workPath+"/application.properties","ftp.user");
String password
= getPropertiesValueByKey(workPath+"/application.properties",
"ftp.password");
String sleep
= getPropertiesValueByKey(workPath+"/application.properties","sleep.time");
sleep =StringUtils.defaultIfEmpty(sleep,"3600");

//String[] reqPathArr ={"/add/request","/all/request"};
String addReqPath
="/add/request";
String allReqPath
="/all/request";

//readAllReq("D:\\temp\\add\\request\\SubscribeInfo000329522012082014060510824.req");

while(true){

{
ApacheFtpClient ftp
=newApacheFtpClient(ftpIp,Integer.valueOf(port),
user, password);
ftp.setPath(addReqPath);
ftp.connectServer();

// boolean result = ftp.upload("D:/4500000436.XML", "/sapinstall/MMIWM/4500000436.XML");
// log.info(result ? "上传成功!" : "上传失败!");

FTPFile[] list
= ftp.ftpClient.listFiles();
for(FTPFile ftpfile
:list){
if(ftpfile.isFile()){

String localPath
= tempFolder
+addReqPath+"/"

+ ftpfile.getName();
ftp.downloadFile(
ftpfile.getName(),localPath);
String delfileName
=newString(ftpfile.getName().getBytes("UTF-8"),"ISO-8859-1");
log.info("DELEfile:"+addReqPath+"/"+ftpfile.getName());

readAddReq(localPath);
ftp.ftpClient.deleteFile(addReqPath+"/"+delfileName);
}
//log.info(ftpfile.getName());
}
ftp.closeServer();
}

{
ApacheFtpClient ftp
=newApacheFtpClient(ftpIp,Integer.valueOf(port),
user, password);
ftp.setPath(allReqPath);
ftp.connectServer();

// boolean result = ftp.upload("D:/4500000436.XML", "/sapinstall/MMIWM/4500000436.XML");
// log.info(result ? "上传成功!" : "上传失败!");

FTPFile[] list
= ftp.ftpClient.listFiles();
for(FTPFile ftpfile
:list){
if(ftpfile.isFile()){
String localPath
= tempFolder
+addReqPath+"/"

+ ftpfile.getName();
ftp.downloadFile(
ftpfile.getName(),localPath);
String delfileName
=newString(ftpfile.getName().getBytes("UTF-8"),"ISO-8859-1");
log.info("DELEfile:"+allReqPath+"/"+ftpfile.getName());

readAllReq(localPath);
ftp.ftpClient.deleteFile(allReqPath+"/"+delfileName);
}
//log.info(ftpfile.getName());
}
ftp.closeServer();
}
try{
log.info("休眠
"+ sleep
+" 秒");
Thread.sleep(Integer.valueOf(sleep)*1000);
}catch(NumberFormatException
e){
log.error(e.getMessage(),
e);
}catch(InterruptedException
e){
log.error(e.getMessage(),
e);
}
}

/**
* FTP远程命令列表 USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASVSTOR
* REST CWD STAT RMD XCUP OPTS ACCTTYPE APPE RNFR XCWD HELP XRMD STOU
* AUTH REIN STRU SMNT RNTO LIST NOOPPWD SIZE PBSZ QUIT MODE SYST ABOR
* NLST MKD XPWD MDTM PROT
* 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n
* ftpclient.sendServer("XMKD/test/bb\r\n"); //执行服务器上的FTP命令
* ftpclient.readServerResponse一定要在sendServer后调用
* nameList("/test")获取指目录下的文件列表 XMKD建立目录,当目录存在的情况下再次创建目录时报错 XRMD删除目录
* DELE删除文件
*/
}

publicstaticConnectiongetConnection(){
int time
=0;
Connection conn
=null;
do{
try{
Class.forName(getPropertiesValueByKey(workPath
+"/application.properties","className"));
conn =DriverManager.getConnection(
getPropertiesValueByKey(workPath

+"/application.properties","connUrl"),
getPropertiesValueByKey(workPath
+"/application.properties","userName"),
getPropertiesValueByKey(workPath

+"/application.properties","password"));
log.debug("数据库连接成功");
break;
}catch(Exception
e){
log.error("数据库连接失败",e);
time ++;
try{
Thread.sleep(3000);
}catch(InterruptedException
e1){
e1.printStackTrace();
}
}
}while(time<3);
return conn;
}

publicstaticvoidreadAllReq(String
path){
log.info("Read all request file:"+path);
BufferedReader reader
=null;
Connection con
= getConnection();//
数据连接
try{
log.info("Read file:"+path);
File file
=newFile(path);
reader =newBufferedReader(newFileReader(file));
int line
=1;
String tempString
=null;
while((tempString=
reader.readLine())!=null){
//System.out.println("line"+line+":"+tempString.split("\t").length);
String[] tempArr
= tempString.split("\t");
if(tempArr.length!=15){
log.warn("Line length error!line "+line+":"+tempString);
continue;
}
String[] param
= tempArr;
String sql
="{call[test].[dbo].[test](?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement call
= con.prepareCall(sql);
call.setString(1,
param[0]);
call.setString(2,
param[1]);
call.setString(3,
param[2]);
call.setString(4,
param[3]);
call.setString(5,
param[4]);
call.setString(6,
param[5]);
call.setString(7,
param[6]);
call.setString(8,
param[7]);
call.setString(9,
param[8]);
call.setString(10,
param[9]);
call.setString(11,
param[10]);
call.setString(12,
param[11]);
call.setString(13,
param[12]);
call.setString(14,
param[13]);
call.setString(15,
param[14]);
call.execute();
line ++;
}
reader.close();
}catch(Exception
e){
log.error(e.getMessage(),
e);
}finally{
if(reader
!=null){
try{
reader.close();
}catch(IOException
e1){
}
}
try{
if(con
!=null)
con.close();
}catch(SQLException
e){
}
}
}

publicstaticvoidreadAddReq(String
path){
BufferedReader reader
=null;
log.info("Read add request file:"+path);
Connection con
= getConnection();//
数据连接
try{
File file
=newFile(path);
reader =newBufferedReader(newFileReader(file));
int line
=1;
String tempString
=null;
while((tempString=
reader.readLine())!=null){
//System.out.println("line"+line+":"+tempString.split("\t").length);

String[] tempArr
= tempString.split("\t");
if(tempArr.length!=15){
log.warn("Line length error!line "+line+":"+tempString);
continue;
}
String[] param
= tempArr;
String sql
="{call[AndroidPlatform].[dbo].[pJTgdlt_ftp_add](?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
CallableStatement call
= con.prepareCall(sql);
call.setString(1,
param[0]);
call.setString(2,
param[1]);
call.setString(3,
param[2]);
call.setString(4,
param[3]);
call.setString(5,
param[4]);
call.setString(6,
param[5]);
call.setString(7,
param[6]);
call.setString(8,
param[7]);
call.setString(9,
param[8]);
call.setString(10,
param[9]);
call.setString(11,
param[10]);
call.setString(12,
param[11]);
call.setString(13,
param[12]);
call.setString(14,
param[13]);
call.setString(15,
param[14]);
call.execute();
line ++;
}
reader.close();
}catch(Exception
e){
log.error(e.getMessage(),
e);
}finally{
if(reader
!=null){
try{
reader.close();
}catch(IOException
e1){
}
}
}
}

staticStringworkPath=null;

publicstaticStringgetPropertiesValueByKey(String
fileName,String key){
Properties p
=newProperties();
String value
="";
try{
InputStream in
=newBufferedInputStream(newFileInputStream(fileName));
p.load(in);
value = p.getProperty(key);
}catch(Exception
e){
e.printStackTrace();
return"";
}
return value;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ftp