歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java中使用FTPClient上傳下載

在JAVA程序中,經常需要和FTP打交道,比如向FTP服務器上傳文件、下載文件,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現上傳下載文件。

一、上傳文件

原理就不介紹了,大家直接看代碼吧

 /**
    * Description: 向FTP服務器上傳文件
    * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保([email protected])創建
    * @param url FTP服務器hostname
    * @param port FTP服務器端口
    * @param username FTP登錄賬號
    * @param password FTP登錄密碼
    * @param path FTP服務器保存目錄
    * @param filename 上傳到FTP服務器上的文件名
    * @param input 輸入流
    * @return 成功返回true,否則返回false
    */
    public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);//連接FTP服務器
            //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器
            ftp.login(username, password);//登錄
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.changeWorkingDirectory(path);
            ftp.storeFile(filename, input);           
           
            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

下面我們寫兩個小例子:

1.將本地文件上傳到FTP服務器上,代碼如下:

@Test
    public void testUpLoadFromDisk(){
        try {
            FileInputStream in=new FileInputStream(new File("D:/test.txt"));
            boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);
            System.out.println(flag);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

2.在FTP服務器上生成一個文件,並將一個字符串寫入到該文件中

@Test
    public void testUpLoadFromString(){
        try {
            InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8"));
            boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input);
            System.out.println(flag);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

二、下載文件

從FTP服務器下載文件的代碼也很簡單,參考如下:

/**
    * Description: 從FTP服務器下載文件
    * @Version1.0 Jul 27, 2008 5:32:36 PM by 崔紅保([email protected])創建
    * @param url FTP服務器hostname
    * @param port FTP服務器端口
    * @param username FTP登錄賬號
    * @param password FTP登錄密碼
    * @param remotePath FTP服務器上的相對路徑
    * @param fileName 要下載的文件名
    * @param localPath 下載後保存到本地的路徑
    * @return
    */
    public static boolean downFile(String url, int port,String username, String password, String remotePath,String fileName,String localPath) {
        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(url, port);
            //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器
            ftp.login(username, password);//登錄
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            ftp.changeWorkingDirectory(remotePath);//轉移到FTP服務器目錄
            FTPFile[] fs = ftp.listFiles();
            for(FTPFile ff:fs){
                if(ff.getName().equals(fileName)){
                    File localFile = new File(localPath+"/"+ff.getName());
                   
                    OutputStream is = new FileOutputStream(localFile);
                    ftp.retrieveFile(ff.getName(), is);
                    is.close();
                }
            }
           
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

Copyright © Linux教程網 All Rights Reserved