0

リモートマシンのディレクトリからファイルをダウンロードするために使用するJavaコードがあります。これで、同じことを行うために使用可能なftpクラスを使用します。コードを実行すると問題が発生し、すべてのファイルがダウンロードされます。しかし、それらすべてのサイズを見ると、すべてがゼロバイトであり、何も含まれていないことがわかります。これの背後にある考えられる理由を分析できる場合は、親切に助けてください。

package login.multiple;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.SocketException;

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

public class Downloader {

    /**
     * @param args
     * @throws FTPException 
     * @throws FTPIllegalReplyException 
     * @throws IOException 
     * @throws IllegalStateException 
     * @throws FTPListParseException 
     * @throws FTPAbortedException 
     * @throws FTPDataTransferException 
     */
    public static void main(String[] args)  {
        // TODO Auto-generated method stub
        FTPFile[] list = null;
        String fileNames[];
        String path = "\\Users\\XXX\\Documents\\Downloads\\Coldplay - Mylo Xyloto [mp3-vbr-2011]";
        int i = 0;
        FileOutputStream fos = null;
        FTPClient client = new FTPClient();
        //client.connect("192.168.1.2");
        try {
            client.connect("127.0.0.1");
            client.login("xxx", "yyy");
            list = client.listFiles(path);
            for(i=0;i<list.length;i++){
            //for(i=0;i<1;i++){
                fos = new FileOutputStream(list[i].getName());
                client.retrieveFile(path + list[i].getName(), fos);
            }
        } catch (SocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            client.disconnect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        }
    }
4

1 に答える 1

1

あなたは を開いているのでFileOutputStream、それを閉じる責任もある可能性が高いです。fos.close()の後に追加しclient.retrieveFileます。あなたのトライキャッチのデザインもめちゃくちゃです。正解すれば診断に役立ちます。の後にすべてを client.connect入れて、メソッドを としてtry {...} finally { client.disconnect(); }宣言します。それはあなたにフェイルファストの振る舞いを与えます。mainthrows Exception

于 2012-04-15T14:34:43.877 に答える