經過幾個小時的努力,終於完成了,現在跟大家一起分享下,本人還是新手有很多不成熟的地方,
還望大家包含,有什麼不足之處還望不惜賜教
在string.xm中聲明兩個變數以便於使用
<?xml version="1.0" encoding="utf-8"?><br /><resources><br /> <string name="hello">FileDownloadActivity!</string><br /> <string name="app_name">FileDownload</string><br /> <string name="FileDownload_txt">下載文字檔</string><br /> <string name="FileDownload_void">下載視頻檔案</string><br /></resources><br />
main.xml中聲明兩個Button按鈕
main.xml檔案<br /><?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ></p><p> <Button android:id="@+id/btnDownloadTxt"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="@string/FileDownload_txt"/></p><p> <Button android:id="@+id/btnDownloadVoid"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="@string/FileDownload_void"/></p><p></LinearLayout>
在AndroidManifest.xml中聲明許可權
<uses-permission android:name="com.studio.android.WRITE_EXTERNAL_STORAGE"/>
在SRC中另外聲明一個包,包名為con.demo.FileDownloadClass
包中有兩個類FileUtils.java ,HttpDownloader.java
FileUtils.java類
package com.demo.FilesDownloadClass;<br />import java.io.File;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import android.os.Environment;<br />public class FileUtils {</p><p>private String SDPATH;</p><p>public String getSDPATH(){<br />return SDPATH;<br />}</p><p>public FileUtils(){<br />//得到當前外部存放裝置的目錄<br />SDPATH=Environment.getExternalStorageDirectory()+"/";<br />}</p><p>//在SD卡上建立檔案<br />public File createSDFile(String fileName) throws IOException{<br />File file=new File(SDPATH +fileName);<br />return file;<br />}</p><p>//在SD卡上建立目錄<br />public File createSDDir(String dirName){<br />File dir=new File(SDPATH + dirName);<br />dir.mkdir();<br />return dir;<br />}</p><p>//判斷SD卡上是否已經相同檔案<br />public boolean isFileExist(String fileName){<br />File file=new File(SDPATH +fileName);<br />return file.exists();<br />}</p><p>//將一個InputStream裡面的資料寫到SD卡中<br />public File writeDataIntoSDCare(String path,String fileName,InputStream input){<br />File file =null;<br />OutputStream output=null;<br />try {<br />createSDDir(path);<br />File f=createSDFile(path + fileName);<br />output = new FileOutputStream(f);<br />byte buffer[] =new byte[4 * 1024];</p><p>while ((input.read(buffer))!=-1){<br />output.write(buffer);<br />}<br />System.out.println(path);<br />file = new File(path);</p><p>} catch (Exception e) {<br />// TODO: handle exception</p><p>e.printStackTrace();<br />}</p><p>finally{<br />try {<br />output.close();<br />}<br />catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />}<br />}<br />return file;</p><p>}<br />}<br />
HttpDownloader.java類
package com.demo.FilesDownloadClass;<br />import java.io.BufferedReader;<br />import java.io.File;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.InputStreamReader;<br />import java.net.MalformedURLException;<br />import java.net.URL;<br />import javax.net.ssl.HttpsURLConnection;<br />public class HttpDownloader {<br />private URL url=null;<br />/*<br /> * 文字檔的下載<br /> *根據URL下載檔案,前提是這個檔案當中的內容上個文本,函數還回的內容就是文字檔的內容<br /> *1.建立一個URL對象<br /> *2.通過URL對象,建立一個HttpURLConnection對象<br /> *3.得到InputStream<br /> *4.從InputStream當中讀取資料<br /> * */</p><p>public String download(String urlStr){<br />StringBuffer sb=new StringBuffer();<br />String line=null;<br />BufferedReader buffer=null;<br />try {<br />//建立一個URL對象<br />url=new URL(urlStr);<br />//建立一個Http串連<br />HttpsURLConnection urlConn=(HttpsURLConnection)url.openConnection();<br />//使用IO流讀取資料<br />buffer=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));<br />while((line=buffer.readLine())!= null){<br />sb.append(line);<br />}<br />}<br />catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />}</p><p>finally{<br />try {<br />buffer.close();<br />}<br />catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />}<br />}</p><p>return sb.toString();<br />}</p><p>/*<br /> * 視頻檔案的下載<br /> * 該函數還回值為整型, -1:代表下載檔案出錯,0:表示下載檔案成功,1:表示下載檔案已經存在<br /> */</p><p>public int downFile(String urlStr, String path, String fileName){</p><p>InputStream inputStream=null;<br />try {<br />FileUtils fileUtils = new FileUtils();</p><p>if(fileUtils.isFileExist(path + fileName)){<br />return 1;<br />}</p><p>else {<br />inputStream = getInputStreamFromUrl(urlStr);<br />File res = fileUtils.writeDataIntoSDCare(path, fileName, inputStream);</p><p>if(res == null){<br />return -1;<br />}<br />}<br />}<br />catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />return -1;<br />}</p><p>finally{<br />try {<br />inputStream.close();<br />} catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />}<br />}</p><p>return 0;</p><p>}<br />//根據URL得到輸入資料流<br />private InputStream getInputStreamFromUrl(String urlStr) throws MalformedURLException ,IOException{<br />// TODO Auto-generated method stub</p><p>url = new URL(urlStr);<br />HttpsURLConnection urlConn = (HttpsURLConnection) url.openConnection();<br />InputStream inputStream = urlConn.getInputStream();<br />return inputStream;<br />}<br />}<br />
RCS中的Activitypackage com.demo.FilesDownload;<br />//引入自訂包<br />import com.demo.FilesDownloadClass.*;<br />import android.app.Activity;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />/*<br /> * 檔案下載的主要步驟:<br /> * 1.建立一個HttpURLConnection對象 HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();<br /> * 2.擷取一個InputStream對象 urlConn.getInputStream();<br /> * 3.訪問網路的許可權android.permission.INTERNET<br /> * 注意必須在AndroidManifest.xml檔案中配置許可權<uses-permission android:name="com.studio.android.WRITE_EXTERNAL_STORAGE"/><br /> * 此例子的結果只能在longCat中看到<br /> * */</p><p>public class FileDownloadActivity extends Activity {<br />private Button btnOne,btnTwo;<br /> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> btnOne=(Button)findViewById(R.id.btnDownloadTxt);<br /> btnOne.setOnClickListener(new DownloadTxtOnClickListener());</p><p> btnTwo=(Button)findViewById(R.id.btnDownloadVoid);<br /> btnTwo.setOnClickListener(new DownloadVoidOnClickListener());<br /> }</p><p> //下載文字檔的監聽器<br /> class DownloadTxtOnClickListener implements OnClickListener<br /> {<br />@Override<br />public void onClick(View v) {<br />// TODO Auto-generated method stub<br />HttpDownloader httpDownloader=new HttpDownloader();<br />String path="http://www.rrting.com/search/download.asp?filename=/English/vocabulary/30201/30201.txt";<br />String lrc= httpDownloader.download(path);//lrc為String型<br />System.out.println(lrc);<br />}<br /> }</p><p> //下載視頻檔案的監聽器<br /> class DownloadVoidOnClickListener implements OnClickListener<br /> {<br />@Override<br />public void onClick(View v) {<br />// TODO Auto-generated method stub<br />HttpDownloader httpDownloader=new HttpDownloader();<br />String path="http://220.168.248.30/bf5ae554b43e5f29a21cbc8bb69a625e/English/yyjc/yych/ytbdc2000/cd13.mp3";</p><p>//path:目錄,voa/ :子目錄 ,cd13.mp3 :檔案名稱(可以取自己喜歡的名稱,不一定要與path中的名字相同)<br />int res= httpDownloader.downFile(path,"voa/","cd13.mp3");//res為int型<br />System.out.println(res);<br />}</p><p> }<br />} 以上代碼還有很多不足之處,望有更好的可以一起探討。呵呵