2014-01-09 115 views
1

您好我使用的是HttpURLConnection獲取txt文件的內容,我想知道該文件的大小,我使用內容長度方法,但它返回錯誤的值,例如在此代碼中文件的大小是17509,但它返回5147? so any Help? 非常感謝:)。請求方法GET返回錯誤的內容長度

new Thread() { 
          @Override 
          public void run() { 
           String path = parser.getValue(e, "txt"); 
           URL u = null; 
           try { 
            u = new URL(path); 
            HttpURLConnection c = (HttpURLConnection) u 
              .openConnection(); 
            c.setRequestMethod("GET"); 
            c.connect(); 
            int lenghtOfFile = c.getContentLength(); 
            InputStream in = c.getInputStream(); 
            final ByteArrayOutputStream bo = new ByteArrayOutputStream(); 
            byte[] buffer = new byte[1024]; 
            long total = 0; 
            Log.i("p1",""+lenghtOfFile); 
            while ((count = in.read(buffer)) != -1) { 
             total += count; 
             Log.i("p2",""+total); 
             bo.write(buffer, 0, count); 
            } 
            bo.close(); 

           } catch (MalformedURLException e) { 
            e.printStackTrace(); 
           } catch (ProtocolException e) { 
            e.printStackTrace(); 
           } catch (IOException e) { 
            e.printStackTrace(); 
           } 

          } 
         }.start(); 

回答

1

content-length是由服務器設置的標頭。我會檢查以確保您的服務器正在返回正確的內容長度。你可以用cUrl做到這一點:

curl -v http://path/to/file.txt 

這應該會顯示發送和返回的標題。

+0

感謝您的答案http路徑是http://mrsoft.weab.eu/chagvalagar/topic1.txt – Mahfa

1

我能想到的一個快速解決方法是忽略內容長度和讀取輸入流,直到沒有剩下可讀的內容。

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(8192); 
int read = inputStream.read(); 

while (read != -1) { 
    byteArrayOutputStream.write((byte) read); 
    read = inputStream.read(); 
} 

byteArrayOutputStream.flush(); 
buf = byteArrayOutputStream.toByteArray();