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

JAVA实现FTP服务器文件的上传,下载,删除功能

zhangliao613 2011-06-10 11:23 531 查看
import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.log4j.Logger;

import com.sinosoft.platform.handup.business.submitcapture.service.CaptureServiceImpl;

import com.sinosoft.platform.handup.utils.HandupInitialiser.Handup;

import sun.net.TelnetOutputStream;

import sun.net.TelnetInputStream;

import sun.net.ftp.FtpClient;

/**

 * FTP文件服务器上传,下载,删除操作

 * @author hejianke83

 *

 */

public class FtpClientUtil{

    String localfilename;

    String remotefilename;

    FtpClient ftpClient;

    /**

     * @param ip 服务器名字

     * @param port 端口

     * @param user 用户名

     * @param password 密码

     * @param path 服务器上的路径

     */

    public void connectServer(String ip, int port, String user,

            String password, String path){

        try {

            ftpClient = new FtpClient();

            ftpClient.openServer(ip, port);

            ftpClient.login(user, password);

            System.out.println("login success!");

            if (path.length() != 0)

                ftpClient.cd(path);

            ftpClient.binary();

        } catch (IOException ex){

            System.out.println("not login");

            System.out.println(ex);

        }

    }

    public void closeConnect() {

        try {

            ftpClient.closeServer();

            System.out.println("disconnect success");

        } catch (IOException ex) {

            System.out.println("not disconnect");

            System.out.println(ex);

        }

    }

    public void upload() {

        this.localfilename = "D://1.txt";

        this.remotefilename = "test2.txt";

        try {

            TelnetOutputStream os = ftpClient.put(this.remotefilename);

            java.io.File file_in = new java.io.File(this.localfilename);

            FileInputStream is = new FileInputStream(file_in);

            byte[] bytes = new byte[1024];

            int c;

            while ((c = is.read(bytes)) != -1) {

                os.write(bytes, 0, c);

            }

            System.out.println("upload success");

            is.close();

            os.close();

        } catch (IOException ex) {

            System.out.println("not upload");

            System.out.println(ex);

        }

    }

    public void download() {

        try {

            TelnetInputStream is = ftpClient.get(this.remotefilename);

            java.io.File file_in = new java.io.File(this.localfilename);

            FileOutputStream os = new FileOutputStream(file_in);

            byte[] bytes = new byte[1024];

            int c;

            while ((c = is.read(bytes)) != -1) {

                // System.out.println((char)is.read());

                // System.out.println(file_in);

                os.write(bytes, 0, c);

            }

            System.out.println("download success");

            os.close();

            is.close();

        } catch (IOException ex) {

            System.out.println("not download");

            System.out.println(ex);

        }

    }

    public void download(String remotePath, String remoteFile, String localFile) {

        try {

            if (remotePath.length() != 0)

                ftpClient.cd(remotePath);

            TelnetInputStream is = ftpClient.get(remoteFile);

            java.io.File file_in = new java.io.File(localFile);

            FileOutputStream os = new FileOutputStream(file_in);

            byte[] bytes = new byte[1024];

            int c;

            while ((c = is.read(bytes)) != -1) {

                // System.out.println((char)is.read());

                // System.out.println(file_in);

                os.write(bytes, 0, c);

            }

            System.out.println("download success");

            os.close();

            is.close();

        } catch (IOException ex) {

            System.out.println("not download");

            System.out.println(ex);

        }

    }

    public void download(String remoteFile, String localFile) {

        try {

            TelnetInputStream is = ftpClient.get(remoteFile);

            java.io.File file_in = new java.io.File(localFile);

            FileOutputStream os = new FileOutputStream(file_in);

            byte[] bytes = new byte[1024];

            int c;

            while ((c = is.read(bytes)) != -1) {

                // System.out.println((char)is.read());

                // System.out.println(file_in);

                os.write(bytes, 0, c);

            }

            System.out.println("download success");

            os.close();

            is.close();

        } catch (IOException ex) {

            System.out.println("not download");

            System.out.println(ex);

        }

    }

    public void delete_file(FtpClientUtil fu,String url) throws Exception {

     fu.ftpClient.sendServer("DELE "+url+"/r/n");

     int status = fu.ftpClient.readServerResponse();

     System.out.print("ftp delete file status:"+status);

     if(status == 250){

      System.out.println("  成功删除FTP服务器中文件");

     }

    }

   

    /**

     * 返回ftp目录下的文件列表

     * @param ftpdirectory

     * @return

     */

     public List getfilenamelist(String ftpdirectory)

 {

  List list = new ArrayList();

  try

  {

   BufferedReader d

           = new BufferedReader(new InputStreamReader(ftpClient

      .nameList(ftpdirectory)));

   String filename = "";

   while ((filename = d.readLine()) != null)

   {

    list.add(filename);

   }

  }

  catch (IOException e)

  {

   e.printStackTrace();

  }

  return list;

 }

    public static void main(String agrs[]) {

//      String filepath[] = { "/callcenter/index.jsp"};

//      String localfilepath[] = { "C:/FTP_Test/index.jsp"};

       

        FtpClientUtil fu = new FtpClientUtil();

        String url = Handup.getPropertie(Constants.PropertyKeys.FTP_SERVER_URL);

        String username = Handup.getPropertie(Constants.PropertyKeys.FTP_USERNAME);

        String password = Handup.getPropertie(Constants.PropertyKeys.FTP_PASSWORD);

//      fu.connectServer(url, 21, username,password,"");

        fu.connectServer("192.168.1.9", 21, "root","sinosoft","");

        try{

         //System.out.print(fu.ftpClient.welcomeMsg);

         fu.ftpClient.sendServer("DELE 博硕士论文/2008/10611/20208/测试上传_20080904525964/Div+CSS布局入门教程.chm/r/n");   //删除服务器上的文件

         System.out.println(fu.ftpClient.readServerResponse());

        }

        catch(Exception e)

        {

         e.printStackTrace();

        }

        //fu.upload();

        //fu.download();

        fu.closeConnect();

    }

 

    /**

     * 检查FTP服务器中文件夹是否存在

     *

     * @param dir

     * @return boolean

     */

    public boolean isServerDirExist(String dir){

        try {

         ftpClient.cd(dir);

        } catch (Exception e) {

            //e.printStackTrace();

            return false;

        }

        return true;

    }

    /**

     * 在FTP服务器中创建文件夹

     *

     * @param dir 文件夹名

     */

    public void createServerDir(String dir){

     try

     {

      ftpClient.ascii();

         StringTokenizer s = new StringTokenizer(dir, "/");

         s.countTokens();

         String pathname = "";

         while (s.hasMoreElements()) {

            pathname = pathname + "/" + (String) s.nextElement();

            try {

             ftpClient.sendServer("mkd " + pathname + "\r\n");// 如果服务器上有该目录,不会被创建

            } catch (Exception e) {

                e = null;

            }

            ftpClient.readServerResponse();

         }

         ftpClient.binary();

     }

     catch(Exception ex)

     {

      ex.printStackTrace();

     }

    }

    /**

     * 将FTP服务器中srcFile中的文件备份到destFile中

     *

     * @param srcFile需要备份的文件

     * @param destFile备份后的文件

     */

    public void ftpToFtpUpload(String srcFile, String destFile){

        TelnetOutputStream os = null;

        TelnetInputStream is = null;

        try {

            is = ftpClient.get(srcFile);

            os = ftpClient.put(destFile);

            byte[] bytes = new byte[1024];

            int c;

            while ((c = is.read(bytes)) != -1) {

                os.write(bytes, 0, c);

            }

            is.close();

            os.close();

        }

        catch (IOException ex) {

         ex.printStackTrace();

        }

        finally

        {

            try {

                if (is != null)

                {

                    is.close();

                    is = null;

                }

                if (os != null)

                {

                    os.close();

                    os = null;

                }

            }

            catch (IOException ex) {

             ex.printStackTrace();

            }

        }

    }

 

 

 public FtpClient getFtpClient() {

  return ftpClient;

 }

 public void setFtpClient(FtpClient ftpClient) {

  this.ftpClient = ftpClient;

 }

}