2012-03-16 6 views
1

私は最近自分のプログラム用のアップデータを作成しようとしています。アップデーターはdropboxに行き、 'public'フォルダー内のファイルを見て、それが存在するかどうかを判断するはずです。それは動作し、ファイルをダウンロードできますが、ファイルが存在するかどうかを確認することはできません。私はthisを見て、それが解決策だと思ったが、うまく動作していないようだ。ここでリモートサーバー上のファイルをチェックし、存在する場合はそれをダウンロードしてください。

は、私は、ファイルの存在を確認するために使用しているコードです:

public static boolean exists(String URLName) { 
    try { 
     HttpURLConnection.setFollowRedirects(false); 
     HttpURLConnection con = (HttpURLConnection) new URL(URLName) 
       .openConnection(); 
     con.setRequestMethod("HEAD"); 

     return (con.getResponseCode() == HttpURLConnection.HTTP_OK); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

しかし、常にtrueを返すようです。私がアクセスしているファイルはすべて「App_」で始まり、「.zip」で終わります。変化する唯一のものは、#。###形式のバージョンです。そのことについて

public static void main(String[] args) throws IOException, 
      InterruptedException { 

     double origVersion = 0.008; 

     double versionTimes = 0.000; 
     while(exists("http://dl.dropbox.com/u/.../" + "App_"+ String.valueOf(origVersion + versionTimes) + ".zip")) { 
      versionTimes = round(versionTimes + 0.001); 
      //origVersion = round(origVersion + 0.001); 


      System.exit(0); 

    } 
    } 
public static boolean exists(String URLName) { 
     try { 
      HttpURLConnection.setFollowRedirects(false); 
      // note : you may also need 
      // HttpURLConnection.setInstanceFollowRedirects(false) 
      HttpURLConnection con = (HttpURLConnection) new URL(URLName) 
        .openConnection(); 
      con.setRequestMethod("HEAD"); 

      return (con.getResponseCode() == HttpURLConnection.HTTP_OK); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 
    static double round(double d) { 
     DecimalFormat twoDForm = new DecimalFormat("#.###"); 
     return Double.valueOf(twoDForm.format(d)); 
    } 

申し訳ありません...このコードは長すぎました:

は、ここで私はそれをチェックしています方法については完全なコードです。とにかく。これをテストするために、今バージョン0.009が利用可能かどうかをチェックします。それはどれですか。そのフルバージョンは変数double origVersionにあります。今、origVersionを0.009に設定すると、0.01をチェックします。 App_0.01.zipが存在しないという事実を除いて、これは問題ありません。

私はまた、引数

THEFILENAME --no-プロキシ--spider

でwgetコマンドを起動して、この問題を解決するためにwgetのに見てきましたが、それはどちらか動作しませんでした。誰でも助けてくれますか?私は大いに感謝します。

また、ファイルとの接続を確立することができる他の場所を見て、セキュリティで保護されている場合はファイルが存在しています。そうでない場合、それはしません。しかし、私はそれをどうやって行うのか分かりません。誰でも暗闇の中から私を連れ出すことができますか?

[EDIT]

はまた、wgetの上THEFILENAME --no-プロキシ--spiderを実行すると、バージョン0.009をチェックするときに、働いていた、と次のように出力:

Spider mode enabled. Check if remote file exists. 
--2012-03-16 08:59:55-- http://dl.dropbox.com/u/.../....zip 
Resolving dl.dropbox.com... 107.21.103.249, 107.20.135.4, 107.20.198.68, ... 
Connecting to dl.dropbox.com|107.21.103.249|:80... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 758067 (740K) [application/zip] 
Remote file exists. 

とをチェックしますバージョン0.01:

Spider mode enabled. Check if remote file exists. 
--2012-03-16 09:01:15-- http://dl.dropbox.com/u/.../....zip 
Resolving dl.dropbox.com... 107.22.196.64, 50.19.217.32, 174.129.218.194, ... 
Connecting to dl.dropbox.com|107.22.196.64|:80... connected. 
HTTP request sent, awaiting response... 404 NOT FOUND 
Remote file does not exist -- broken link!!! 

私もthisを使用してwgetの出力を読み取り、(input.indexOf( "404が見つかりません")== -1)の場合、まだ無駄に使ってみました。

+0

* "最近私のプログラム用のアップデータを作成しようとしています。 GUIを持っている場合は、[Java Web Start](http:// stackoverflow。com/tags/java-web-start/info)。自動更新は、JWSが提供する機能の1つに過ぎません。 –

+0

ありがとう!私はそれを調べます!しかし、コンソールプログラムの場合はウェブスタートの仕事はありますか?それは... – Xyene

答えて

0

HEADリクエストを行うことは、ファイルがリモートサーバーに存在するかどうかを確認する正しい方法です。

exists(String URLName)メソッドで何か問題が発生することはありませんので、あなたが思っているURLが渡されていることを確認します。であることを奇妙に見える何

はこの行です:

versionTimes = round(versionTimes + 0.001); 

あなたは、ファイルの存在をチェックし、あなたのメッセージを印刷する間にversionTimesの値を変更しています。

+0

返事をありがとう!私はあなたが言ったようにSystem.out.println( "http://dl.dropbox.com/u/67341745/" + "HAL _" + String.valueOf(origVersion + versionTimes)+ ".zip" ")を使用し、 (存在する)の前にversionTimesを追加しても動作しません。Dropboxがスパイダーを無効にすることができますか? – Xyene

+0

'System.out.println(URLName + "= + con.getResponseCode())'を 'exists()'に設定すると、特定のURLに対して200または404を見ることができます。 –

+0

うーん...どちらもうまくいかなかった...ああ。私はC++で自分のプログラム全体を書き直すつもりです...そのようなものを更新するのは難しくありません。とにかく、ありがとうございました! – Xyene