码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-09-07 12:21:35      阅读:262      评论:0      收藏:0      [点我收藏+]

标签: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.

 */

/**

 * @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);// 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 {

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

标签:java ftp

原文地址:http://blog.csdn.net/wiker_yong/article/details/39118719

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!