2

Java を使用してリモート ftp サーバーからファイルをダウンロードしようとしています ( FTPClient)。ファイルは正常にダウンロードされましたが、空で、問題の解決策が見つかりませんでした

これは私のコードです

FTPClient ftpClient = new FTPClient();
                 try {

                        ftpClient.connect(ip, port);
                        ftpClient.login(user, pass);
                        ftpClient.enterLocalPassiveMode();
                        ftpClient.epsv();
                        ftpClient.mlsd();

                        File downloadFile = new File("contextFolder/test.txt");
                        OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(downloadFile));
                        InputStream inputStream = ftpClient.retrieveFileStream(remoteFile);

                        byte[] bytesArray = new byte[4096];
                        int length;
                        //copy the file content in bytes 
                        while ((length = inputStream.read(bytesArray)) > 0){

                            outputStream.write(bytesArray, 0, length);

                        }

                        Boolean success = ftpClient.completePendingCommand();

                        outputStream.close();
                        inputStream.close();
                        if (success) {
                            System.out.println("File "+remoteFile+" has been downloaded successfully.");
                        }


            }catch(Exception ex){}

ファイルを test.txt という名前で contextFolder に保存する必要があります:) ありがとうございました:)


これは私が得ている例外です

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
    at sun.nio.cs.StreamDecoder.read(Unknown Source)
    at java.io.InputStreamReader.read(Unknown Source)
    at java.io.BufferedReader.fill(Unknown Source)
    at java.io.BufferedReader.read(Unknown Source)
    at org.apache.commons.net.io.CRLFLineReader.readLine(CRLFLineReader.java:58)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:314)
    at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:483)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:556)
    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:605)
    at org.apache.commons.net.ftp.FTP.pasv(FTP.java:956)
    at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:806)
    at org.apache.commons.net.ftp.FTPClient._retrieveFileStream(FTPClient.java:1853)
    at org.apache.commons.net.ftp.FTPClient.retrieveFileStream(FTPClient.java:1844)
    at com.ericsson.etl.module.Activity1.execute(Activity1.java:49)
    at com.ericsson.etl.SequenceProcessor.doActivities(SequenceProcessor.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
4

2 に答える 2

1

「ファイル XXX がダウンロードされました」というメッセージが表示されますか? そうでない場合、考えられる原因は、例外がスローされ、これによって暗黙のうちに破棄されることです。

} catch (Exception ex){}

そのような例外は絶対にキャッチしないでください。

于 2013-05-08T11:11:19.320 に答える
0

outputStream.flush()閉じる前にお試しください。

それでも問題が解決しない場合はex.printStackTrace()、try ブロックで例外がスローされているかどうかを確認する必要があります。多くの場合、そこに理由があります (たとえば、書き込み権限がない、接続エラーなど)。

于 2013-05-08T11:16:32.820 に答える