Androidはネットワークファイルをダウンロードします.

2386 ワード

もっと読む
ファイルのアップロードを実現しました.ファイルのアップロードは自分でPostフォームに組み合わせた形でHttpのPost送信を行います.これはファイルのダウンロードです.実はダウンロードファイルはホームページを開くのと同じです.ウェブページを開くと内容が表示されます.ファイルを保存するのはファイルに保存すればいいです.
実現されたコードは基本的に以下の通りです.


public void downFile(String url, String path, String fileName)
throws IOException {
if (fileName == null || fileName == "")
this.FileName = url.substring(url.lastIndexOf("/") + 1);
else
this.FileName = fileName; //      ,        ,       

URL Url = new URL(url);
URLConnection conn = Url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
this.fileSize = conn.getContentLength();//           
if (this.fileSize <= 0) { //        0
throw new RuntimeException("         ");
}
if (is == null) { //      
sendMsg(Down_ERROR);
throw new RuntimeException("      ");
}
FileOutputStream FOS = new FileOutputStream(path + this.FileName); //          ,          

byte buf[] = new byte[1024];
downLoadFilePosition = 0;

int numread;

while ((numread = is.read(buf)) != -1) {
FOS.write(buf, 0, numread);
downLoadFilePosition += numread
 
} 
try {
is.close();
} catch (Exception ex) {
 
}

}
このコードにより、SDカードなどのデバイスにコンテンツを保存することができます.もちろん、インターネットを利用するには、インターネットへのアクセス権限が必要です.これは自分で追加する必要があります.ここでは追加しません.
上のコードはプログレスバー機能を実現していません.プログレスバー機能を実現するには、メッセージを使ってプロンプトを送信することを考えています.まずメッセージを実現します.

private Handler downloadHandler = new Handler() { //       ,     
@Override
public void handleMessage(Message msg) { //       ,             
if (!Thread.currentThread().isInterrupted()) {
switch (msg.what) {
case DOWN_START:
pb.setMax(fileSize); //      
case DOWN_POSITION:
pb.setProgress(downLoadFilePosition); //     
break;
case DOWN_COMPLETE:
Toast.makeText(DownLoadFileTest.this, "    !", 1).show(); //     
break;

case Down_ERROR:
String error = msg.getData().getString("    !");
Toast.makeText(DownLoadFileTest.this, error, 1).show();
break;
}
}
super.handleMessage(msg); 
}
};
このようにダウンロードする時には、該当のメッセージを送信すれば、相応のヒントがあります.もう細かく書きません