首页 > 代码库 > java连接FTP、删除、下载文件的方法
java连接FTP、删除、下载文件的方法
本文共例举了二个连接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.
*/
/**
* @authorWiker 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{
Stringfile1 ="";
String file2="";
Stringfolder1 ="";
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;
importjava.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;
importjava.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
*/
/**
* @authorWiker 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 inFtp 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, Stringnewname)
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、删除、下载文件的方法