0

ファイルが最後に読み込まれた位置から再起動する ftp ダウンローダーを作成しようとしています。このためのメタデータを保存します。しかし、テスト中にクライアントを追い出し、サーバーも切断しています。しかし、コードに示されているように、ハンドルは例外にはなりません。

package fileresumes;

/**
 *
 * @author agarwall
 */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPConnectionClosedException;
import org.apache.commons.net.ftp.FTPFile;

public class FileRes {

    public static void main(String[] args) {

        FTPClient client = new FTPClient();
        FileOutputStream fos = null;
        int totalBytesRead = 0;

        try {
            client.connect("localhost");
            client.login("anonymous", "");
            // The remote filename to be downloaded. 
            String filename = "testing.txt";
            fos = new FileOutputStream(filename);

            boolean append = false;
            int offset = 0;
            long last_modified = 0;
            int size = 0;

            //long ro = client.getRestartOffset();
            //ro = client.getRestartOffset();
            //Download file from FTP server;

            final File file = new File("C:/users/deadman/Desktop/", "testing.txt");

            if (file.exists()) {
                last_modified = file.lastModified();       // lastModified() returns the milliseconds since 1970-01-01
                append = true;
                // Read offset from meta-data file 
                size = (int) file.length();
                offset = size;
            }

            //Setting the offset to resume download
            client.setRestartOffset(offset);
            InputStream inputFileStream;

            inputFileStream = client.retrieveFileStream("/large.txt");
            int bytesRead = 0;

            try {

                OutputStream out = new FileOutputStream(file, append);
                final byte[] bytes = new byte[1024];

                while ((bytesRead = inputFileStream.read(bytes)) != -1) {
                    out.write(bytes, 0, bytesRead);
                    totalBytesRead += bytesRead;
                }
                inputFileStream.close();
                out.flush();

                int get_reply_code = client.getReplyCode();

                System.out.println(get_reply_code);

            } catch (IOException e) {

                // I want my metadata to be updated here .

                System.out.println("IOException");

            } catch (RuntimeException e) {
                // I want my metadata to be updated here . 
                System.out.println("Runtime Exception ");
            } finally {
                try {

                    int get_reply_code = client.getReplyCode();
                    System.out.println(get_reply_code);

                    if (fos != null) {
                        fos.close();
                    }
                    client.disconnect();
                    System.out.println("finish");
                } catch (IOException e) {
                }
            }
        } catch (Exception e) {
        }
    }
}

接続が切断された場合、ここで例外をどのように処理できますか。

4

1 に答える 1

-1

私は似たようなことをしようとしてきましたが、これまでのところ、別のコマンドを試すことしかできませんでした。私はまだコーディングで転送を行っていませんが、ログインしてタイムアウトが発生したり、キックされたりした場合、フォルダー (または同様のもの) を変更しようとすると、FTPConnectionClosedException がスローされます。私はグーグルを見回し、ここに質問を投稿して、より良い方法があるかどうかを確認しましたが、これまでのところ何も聞いていません.

于 2013-05-01T22:18:36.630 に答える