日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開源 > 綜合技術(shù) > android 文件下載和保存

android 文件下載和保存

來源:程序員人生   發(fā)布時(shí)間:2016-11-22 08:16:57 閱讀次數(shù):5505次
        這個(gè)demo演示從網(wǎng)上下載文件并保存得手機(jī),demo中可以下載1個(gè)XML文件并在Console窗口輸出,還可以下載1個(gè)MP3文件并保存得手機(jī)存儲(chǔ)目錄中的BoBoMusic文件夾中,下載保存成功會(huì)返回:0。(XML和MP3文件我已傳到百度的對(duì)象存儲(chǔ)中,方便大家調(diào)用demo中的URL調(diào)試)

完全demo:下載地址

首先:在Manifest文件中添加訪問網(wǎng)絡(luò)和讀寫存儲(chǔ)的權(quán)限
    <uses-permission
        android:name="android.permission.INTERNET"/>
    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

然后:文件工具類 FileUtils.java

package fk.androiddemo_009; import android.os.Environment; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; /** * Created by Administrator on 2016/9/14. */ public class FileUtils { private String SDCardRoot; public FileUtils(){ //得到當(dāng)前外部存儲(chǔ)裝備的目錄 SDCardRoot= Environment.getExternalStorageDirectory()+File.separator; //File.separator為文件分隔符”/“,方便以后在目錄下創(chuàng)建文件 } //在SD卡上創(chuàng)建文件 public File createFileInSDCard(String fileName,String dir) throws IOException { File file=new File(SDCardRoot+dir+File.separator+fileName); file.createNewFile(); return file; } //在SD卡上創(chuàng)建目錄 public File createSDDir(String dir)throws IOException{ File dirFile=new File(SDCardRoot+dir); dirFile.mkdir();//mkdir()只能創(chuàng)建1層文件目錄,mkdirs()可以創(chuàng)建多層文件目錄 return dirFile; } //判斷文件是不是存在 public boolean isFileExist(String fileName,String dir){ File file=new File(SDCardRoot+dir+File.separator+fileName); return file.exists(); } //將1個(gè)InoutStream里面的數(shù)據(jù)寫入到SD卡中 public File write2SDFromInput(String fileName,String dir,InputStream input){ File file=null; OutputStream output=null; try { //創(chuàng)建目錄 createSDDir(dir); //創(chuàng)建文件 file=createFileInSDCard(fileName,dir); //寫數(shù)據(jù)流 output=new FileOutputStream(file); byte buffer[]=new byte[4*1024];//每次存4K int temp; //寫入數(shù)據(jù) while((temp=input.read(buffer))!=⑴){ output.write(buffer,0,temp); } output.flush(); } catch (Exception e) { System.out.println("寫數(shù)據(jù)異常:"+e); } finally{ try { output.close(); } catch (Exception e2) { System.out.println(e2); } } return file; } }


下載工具類:HttpDownloader.java

package fk.androiddemo_009; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * Created by Administrator on 2016/9/14. */ public class HttpDownloader { String line=null; StringBuffer strBuffer=new StringBuffer(); BufferedReader bufferReader=null; //下載小型的文檔文件,返回文檔的String字符串 public String downloadFiles(String urlStr){ try { InputStream inputStream=getInputStreamFromUrl(urlStr); bufferReader=new BufferedReader(new InputStreamReader(inputStream)); while((line=bufferReader.readLine())!=null){ strBuffer.append(line+'\n'); } } catch (Exception e) { strBuffer.append("something is wrong!!"); System.out.println("讀取數(shù)據(jù)異常:"+e); } finally{ try { bufferReader.close(); } catch (Exception e) { strBuffer.append("something is wrong!!"); e.printStackTrace(); } } return strBuffer.toString(); } //可以下載任意文件,例如MP3,并把文件存儲(chǔ)在制定目錄(⑴:下載失敗,0:下載成功,1:文件已存在) public int downloadFiles(String urlStr,String path,String fileName){ try { FileUtils fileUtils=new FileUtils(); if(fileUtils.isFileExist(fileName,path)) return 1;//判斷文件是不是存在 else{ InputStream inputStream=getInputStreamFromUrl(urlStr); File resultFile=fileUtils.write2SDFromInput(fileName,path,inputStream); if(resultFile==null) return ⑴; } } catch (Exception e) { System.out.println("讀寫數(shù)據(jù)異常:"+e); return ⑴; } return 0; } public InputStream getInputStreamFromUrl(String urlStr)throws IOException { //創(chuàng)建1個(gè)URL對(duì)象 URL url=new URL(urlStr); //創(chuàng)建1個(gè)HTTP鏈接 HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); //使用IO流獲得數(shù)據(jù) InputStream inputStream=urlConn.getInputStream(); return inputStream; } }


主界面:MainActivity.java

package fk.androiddemo_009; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; //1,在Manifest文件中注冊(cè)Internet和讀寫SDCard的權(quán)限 //2,下載不能在主線程中進(jìn)行,要開分線程 public class MainActivity extends AppCompatActivity implements View.OnClickListener{ Button but1,but2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); but1=(Button)findViewById(R.id.but1); but1.setOnClickListener(this); but2=(Button)findViewById(R.id.but2); but2.setOnClickListener(this); } @Override public void onClick(View v) { if(v==but1){ new downloadFileThread().start(); }else if(v==but2){ new downloadMP3Thread().start(); } } class downloadFileThread extends Thread{ public void run(){ HttpDownloader httpDownloader=new HttpDownloader(); String fileData=httpDownloader.downloadFiles("http://mystudy.bj.bcebos.com/AndroidDemo_009.xml"); System.out.println(fileData); } } class downloadMP3Thread extends Thread{ public void run(){ HttpDownloader httpDownloader=new HttpDownloader(); int downloadResult=httpDownloader.downloadFiles( "http://fengkui.bj.bcebos.com/%E8%B6%B3%E9%9F%B3.mp3","BoBoMusic","足音.mp3"); System.out.println("下載結(jié)果:"+downloadResult); } } }


運(yùn)行截圖:



PS:有1點(diǎn)需要注意,在Android6.0及以上的系統(tǒng),由于權(quán)限申請(qǐng)的改動(dòng),此demo安裝后需要在APP管理中手動(dòng)打開存儲(chǔ)權(quán)限才能正常運(yùn)行,否則沒法向存儲(chǔ)器中寫數(shù)據(jù),具體緣由可以參考這兩篇博文:
http://unclechen.github.io/2016/03/05/Android6.0%E8%BF%90%E8%A1%8C%E6%97%B6%E6%9D%83%E9%99%90%E7%AE%80%E4%BB%8B/

http://unclechen.github.io/2016/03/06/Android6.0%E6%9D%83%E9%99%90%E9%80%82%E9%85%8D%E4%B9%8BSD%E5%8D%A1%E5%86%99%E5%85%A5/?utm_source=tuicool&utm_medium=referral

虛擬機(jī)中打開存儲(chǔ)權(quán)限的位置:



如果想要在虛擬機(jī)上查看下載的MP3文件,可以在SDK目錄下的platform-tools中利用adb.exe查看,命令以下,原來亦可使用DDMS,但是現(xiàn)在需要打開權(quán)限挺麻煩。


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产高清在线 | 国产精品av一区二区三区 | aaa免费看 | 欧美日韩免费在线观看 | 第一福利视频网站 | 国产老女人精品毛片久久 | 国产精品久久久久久久久久久久久 | 黄色成年视频 | 综合久久国产九一剧情麻豆 | 美女在线视频免费 | 国产精品久久久精品 | 久草av在线播放 | 国产一区在线播放 | 欧美电影一区二区三区 | a天堂在线观看 | 国产成人午夜精华液 | 成人国产免费视频 | 日韩视频一区二区在线 | 91精品久久久久久久久久 | av福利网 | 亚洲精品高清视频 | 自拍偷拍亚洲精品 | 自拍偷拍亚洲精品 | 一级毛片视频 | 欧美日韩激情一区 | 欧美色人 | 国产成人99久久亚洲综合精品 | 高清国产一区 | 欧美日韩亚洲二区 | 色综合视频在线观看 | 欧美日韩免费观看视频 | 国产91在线 | 亚洲 | 久久精品国产综合 | 日本视频中文字幕 | 欧美视频a | 欧美一区二区在线播放 | 国产亚洲精品久久久久动 | 成人免费观看视频 | 久久91视频 | 久久精品看片 | 久久久在线免费观看 |