2013-02-11 52 views
0

我想從運行在嵌入式設備上的Web服務器下載二進制文件。該文件可以通過使用 URL:http://10.10.10.10/config.bin ...進行基本http身份驗證後手動下載...現在,我想用簡單的Java應用程序自動執行此過程。通過使用基本的Java工具,我設法下載文件:從Java中的URL下載文件的方法

URL mlrrl = new URL(url); 
      HttpURLConnection con = (HttpURLConnection) mlrUrl.openConnection(); 

      con.setRequestMethod("GET"); 
      con.setAllowUserInteraction(false); 
      con.setDoInput(true); 
      con.setDoOutput(true); 
      con.setConnectTimeout(10000); 
      con.setRequestProperty("Authorization", "Basic " + authStringEnc); 

      InputStream stream = con.getInputStream(); 
      BufferedInputStream in = new BufferedInputStream(stream); 
      FileOutputStream file = new FileOutputStream("configDown.bin"); 
      BufferedOutputStream out = new BufferedOutputStream(file); 
      int i; 
      while ((i = in.read()) != -1) { 
       out.write(i); 
      } 
      out.flush(); 

這似乎工作正常!與手動(通過Browser-Webinterface)下載的文件相比,生成的文件具有相同的長度,但在使用十六進制編輯器打開兩個二進制文件後,它們是不同的。

我的問題:

  1. 任何想法,爲什麼十六進制代碼是不同的? (可能缺少連接屬性?)
  2. apache.commons包中有一個copyUrlToFile-Method。作爲替代,是否可以使用基本的http認證?
  3. 有沒有其他的Java庫或從urls下載文件的工具?
+1

你有沒有檢查一個是大的endian和另一個小的endian? – 2013-02-11 15:32:30

+0

從文件的前8個字節似乎是相同的。所以我不認爲這是一個endian問題。 – Gerd 2013-02-11 15:44:46

+0

只是一個瘋狂的想法,嘗試使用管道流(這是一個例子:http://www.devx.com/tips/Tip/12982),這將消除整數的讀/寫。 – 2013-02-11 15:53:05

回答

0

我無法解釋爲什麼,但錯誤的屬性「setDoOutput」=「true」可能會影響下載文件的內容。將值設置爲「false」解決了我的問題!