【问题标题】:FTP multiple files using apache commons into a local directory使用 apache commons 将多个文件 FTP 到本地目录
【发布时间】:2013-05-30 11:47:25
【问题描述】:

我正在尝试使用 apache commons 将目录中的所有文件下载到我的本地计算机,如下所示:

import java.io.FileOutputStream;
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPFile;

public class FTPExample {
    public static void main(String[] args) throws SocketException, IOException {
        FTPClient client = new FTPClient();
        client.connect("MyHostName");
        client.enterLocalPassiveMode();
        client.login("username", "password");
        FTPFile[] files = client.listFiles("/App/");
        for (FTPFile file : files) {
            System.out.println(file.getName());
          FileOutputStream fos = new FileOutputStream("Ftp Files/"  + file.getName());
            client.retrieveFile(file.getName(),fos);             
        }
    }
}

我能够列出目录中的文件,但在尝试下载文件时出现 FilenotFound 异常。请帮忙。 我的错误是:

Exception in thread "main" java.io.FileNotFoundException: Ftp Files\01 (The system cannot find the path specified)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:212)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:104)
    at ftpexample.FTPExample.main(FTPExample.java:30)
Java Result: 1

编辑:我需要将文件以其原始文件名存储在文件夹 Ftp 文件/中。

【问题讨论】:

  • 本地机器上的文件夹好像不存在。
  • 没有,相信我。

标签: java apache ftp-client


【解决方案1】:

感谢那些试图提供帮助的人。我在这里找到了我的问题的答案。我是这样做的:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;


public class FTPExample {

    public static void main(String[] args) {
        try {

            //new ftp client
            FTPClient ftp = new FTPClient();
            //try to connect
            ftp.connect("MyHhostName");
            //login to server
            if (!ftp.login("username", "password")) {
                ftp.logout();
            }
            int reply = ftp.getReplyCode();
            //FTPReply stores a set of constants for FTP reply codes. 
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
            }

            //enter passive mode
            ftp.enterLocalPassiveMode();
            //get system name
            System.out.println("Remote system is " + ftp.getSystemType());
            //change current directory
            ftp.changeWorkingDirectory("/App/PMIGENV/BACK/Finacle/FC/app/CDCI_LOGS/log/UBSADMIN");
            System.out.println("Current directory is " + ftp.printWorkingDirectory());

            //get list of filenames
            FTPFile[] ftpFiles = ftp.listFiles();

            if (ftpFiles != null && ftpFiles.length > 0) {
                //loop thru files
                for (FTPFile file : ftpFiles) {
                    if (!file.isFile()) {
                        continue;
                    }
                    System.out.println("File is " + file.getName());
                    //get output stream
                    OutputStream output;
                    output = new FileOutputStream("FtpFiles" + "/" + file.getName());
                    //get the file from the remote system
                    ftp.retrieveFile(file.getName(), output);
                    //close output stream
                    output.close();

                    //delete the file
                    // ftp.deleteFile(file.getName());

                }
            }

            ftp.logout();
            ftp.disconnect();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

【讨论】:

    【解决方案2】:

    这是工作代码。我已经尝试了很长时间,但现在它工作正常。 以前它是下载 0Kb 大小的文件。

    import java.io.FileOutputStream;
    import java.io.IOException;   
    import java.io.OutputStream; 
    import org.apache.commons.net.ftp.FTPClient;  
    import org.apache.commons.net.ftp.FTPFile;
    
    
    public class FTPDownload {
    
    public void ftpDownload() throws IOException
    {
        String host="your_host_name";
        String uname="your_user_name";
        String pass="your_password";
        String remoteDIR="/public_html/tmp";
        String localDIR="D://FTP";
    
        //Object for FTPClient class
    
        FTPClient ftp=new FTPClient();  
    
        ftp.connect(host);
        boolean login=ftp.login(uname, pass);
        ftp.enterLocalPassiveMode();
        ftp.changeWorkingDirectory(remoteDIR);
        FTPFile[] files=ftp.listFiles();
    
    
        try{
                if(login){
            System.out.println("Your Are Logged In "+ftp.getStatus()); 
            System.out.println("Working Directory is "+ftp.printWorkingDirectory());
            System.out.println("Local Directory is "+localDIR);
            System.out.println("Total Files Are "+files.length);
    
    
            if(files != null && files.length >0 )
            {
                for(FTPFile fl:files)
                {
                    if(!fl.isFile())
                    {
                        continue;
                    }
                    System.out.println(fl.getName());
                    OutputStream out;
                    out=new FileOutputStream(localDIR+"/"+fl.getName());
                    ftp.retrieveFile(fl.getName(), out);
                    out.close();
                }
            }
    
        }
        else
        {
            System.out.println("Sorry");
        }
    
        ftp.logout();
        ftp.disconnect();
    
        }
    
        catch(Exception e){
            System.out.println(e);
        }
    
    
    }
    
    public static void main(String[] args) throws IOException {
        FTPDownload ft=new FTPDownload();
        ft.ftpDownload();
    }
    }
    

    【讨论】:

    • 你不觉得有点太晚了吗?
    • 我知道,但我只是想分享无论我做了什么,我认为它可能会帮助像我这样真正想解决同样问题的人。
    • 2022 仍然有用,遗留代码无处不在
    猜你喜欢
    • 2011-05-26
    • 2015-01-24
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多