2011-02-03 7 views
0

私は多くのコードスニペットをチェックしてバッファーの有無にかかわらず、SDカード全体のファイルをダウンロードすることはできません。私が現在使用してコードは次のとおりです。Android - ファイルダウンロードの問題 - 不完全なファイル

try { 
     url = new URL("http://mywebsite.com/directory/"); 
    } catch (MalformedURLException e1) { } 

    String filename = "someKindOfFile.jpg"; // this won't be .jpg in future 

    File folder = new File(PATH); // TODO: add checking if folder exist 
    if (folder.mkdir()) Log.i("MKDIR", "Folder created"); 
    else Log.i("MKDIR", "Folder not created"); 
    File file = new File(folder, filename); 

    try { 
     conn = url.openConnection(); 
     is = conn.getInputStream(); 

     BufferedInputStream bis = new BufferedInputStream(is); 
     ByteArrayBuffer baf = new ByteArrayBuffer(50); 
     int current = 0; 
     while ((current = bis.read()) != -1) { 
       baf.append((byte) current); 
     } 
     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(baf.toByteArray()); 
     fos.close(); 
     is.close(); 
    } catch (IOException e) { } 

このコードは、ファイルの唯一の77バイトをSDカード上のディレクトリが作成されますが、ダウンロードされます。何が問題なのでしょうか?

+0

どうやって77バイトしかダウンロードできないのですか? –

+0

@ chirag-shag 77バイトはDDMSエミュレータのファイルサイズです。SDカードファイルエクスプローラ – yosh

+0

予想される結果は何ですか? wgetやcurlのようなツールを使って同じコンテンツをダウンロードしようとしましたが、あなたのコードがダウンロードしているものと比較してみましたか?あなたが作成する77バイトのファイルの内容は何ですか? – RivieraKid

答えて

1

ここでエラーが代わりに入力ストリームから読み込まれたバイトの彼はbyteデータ型に変換count変数を書いたことである(それらはbis.read(buffer)介して一時byte[] bufferに格納されるべきである) 適切なコードブロックがあるべきである。

BufferedInputStream bis = new BufferedInputStream(is); 
FileOutputStream fos = new FileOutputStream(file); 
int current = 0; 
byte[] buffer = new byte[1024]; 
while ((current = bis.read(buffer)) != -1) { 
    fos.write(buffer, 0, current); 
} 
fos.close(); 
is.close();