0

以下のコードをボタンクリックで使用して、ファイルをダウンロードして場所に保存しようとしています。ただし、常に目的の宛先が見つからなかったことを返します。必要なディレクトリを作成していないようです。それを行うように指示する必要がありますか、それとも私のためにそれを行うことになっていますか? 以下は私が使用している機能です:

public void actionPerformed(ActionEvent ae) {
            try {
                //ProgressBar/Install
                System.out.println("FILELOCATION:\n----------");
                System.out.println(filelocation.getText());
                String URL_LOCATION = "http://www.futureretrogaming.tk/gamefiles/ProfessorPhys.iso";
                String LOCAL_FILE = (filelocation.getText() + "\\ProfessorPhys\\");
                System.out.println("LOCALFILE:\n-------");
                System.out.println(LOCAL_FILE);
                URL website = new URL(URL_LOCATION);
                ReadableByteChannel rbc = Channels.newChannel(website.openStream());
                FileOutputStream fos = new FileOutputStream(LOCAL_FILE+"\\ProfessorPhys.iso\\");
                fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
                System.out.println("--------\nDone Downloading\n---------");
            } catch (Exception e) {
                System.out.println(e);
            }

編集:
ダウンロードするディレクトリを手動で作成すると(ちょっと)。ディレクトリが既に存在するかどうか、およびディレクトリが作成されていないかどうかを確認する方法はありますか? また、ダウンロードすると、表示されるダウンロードファイルが0バイトであるため、ダウンロードしないファイルを作成するだけです。どうすればこれを修正できますか?

編集:
ディレクトリが存在するかどうかを確認し、存在しない場合は作成する以下のコードを作成しました。これは機能しますが、まだ機能しないのはダウンロードだけです。その問題を今、タイトルに含めました。

動作するコードが必要な人は、次のとおりです。

        String LOCAL_FILE = (filelocation.getText() + "\\ProfessorPhys\\");
        File localfile = new File(LOCAL_FILE);
        if (localfile.exists()) {
            System.out.println("Directory exists!");
        }
        else {
            System.out.println("Directory doesn't exist! Creating...");
            localfile.mkdir();
            if (localfile.exists())
                System.out.println("Directory created!");
        }
4

2 に答える 2

2

transferFrom()メソッドをワンライナーとして使用しています。ただし、より多くのデータが利用可能かどうかを確認する必要があると思います。APIから:

ソースチャネルから最大 count バイトを読み取り、指定された位置からこのチャネルのファイルに書き込む試みが行われます。このメソッドを呼び出すと、要求されたすべてのバイトが転送される場合と転送されない場合があります。そうするかどうかは、チャネルの性質と状態に依存します。ソース チャネルの残りのバイト数が count バイトより少ない場合、またはソース チャネルが非ブロッキングであり、入力バッファーですぐに使用できるバイト数が count バイトより少ない場合は、要求されたバイト数よりも少ないバイト数が転送されます。

役立つかもしれない同様の質問も投稿されました。

于 2013-06-28T08:15:00.643 に答える