首页 > 代码库 > 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);// pathftp服务下主目录的子目录

            }

            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);// pathftp服务下主目录的子目录

            }

            //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、删除、下载文件的方法