Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android:文件下載和寫入SD卡學習小結

Android:文件下載和寫入SD卡學習小結

編輯:關於Android編程

今天剛剛學習完Android文件下載和寫入SD卡的,以後做一個小結,以供以後學習查閱:

 一、文件下載
      Android開發中,有時需要從網上下載一些資源以供用戶使用,Android API中已經提供了很多直接可以用的類供大家使用,一般文件下載需要通過三個步驟:
      1.創建一個HttpURLConnection對象:
[java] 
// 創建一個URL對象,urlStr指的是網絡IP地址 
url = new URL(urlStr); 
// 創建一個HttpURLConnection連接 
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); 
      2.獲得一個InputStream對象:
[java] 
InputStream input=null; 
input=urlConn.getInputStream(); 
      3.設置訪問網絡的權限:
[java] 
//在AndroidManifest.xml配置文件中加入權限信息 
<uses-permission android:name="android.permission.INTERNET"/> 
二、訪問並寫入SD卡
     由於手機內存有限,所以一般需要將資料放入大容量容器SD卡中,不同手機SD卡所在目錄不一樣,這就需要咱們通過一個統一的函數找到SD卡所在的目錄,再對它進行操作,Android中提供了一個函數,可以查找到基本上所有類型型號的手機SD卡所在的目錄:
[java]
//得到當前設備SD卡的目錄 
Environment.getExternalStorageDirectory(); 
     在訪問SD卡前還必須在配置文件中設置權限,這樣才可以最SD卡進行存取操作:
[java] view plaincopy
//在AndroidManifest.xml配置文件中加入權限信息 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     以下是一個對SD操作經常用到的類,以後如果需要對SD卡操作,直接可以拿過來用:
[java] 
public class FileUtils { 
 
    private String SDPATH; 
 
    public String getSDPATH() { 
        return SDPATH; 
    } 
    public FileUtils() { 
        //得到當前外部存儲設備的目錄 
        // /SDCARD 
        SDPATH = Environment.getExternalStorageDirectory() + "/"; 
    } 
    /**
     * 在SD卡上創建文件
     * 
     * @throws IOException
     */ 
    public File creatSDFile(String fileName) throws IOException { 
        File file = new File(SDPATH + fileName); 
        file.createNewFile(); 
        return file; 
    } 
     
    /**
     * 在SD卡上創建目錄
     * 
     * @param dirName
     */ 
    public File creatSDDir(String dirName) { 
        File dir = new File(SDPATH + dirName); 
        dir.mkdir(); 
        return dir; 
    } 
 
    /**
     * 判斷SD卡上的文件夾是否存在
     */ 
    public boolean isFileExist(String fileName){ 
        File file = new File(SDPATH + fileName); 
        return file.exists(); 
    } 
     
    /**
     * 將一個InputStream裡面的數據寫入到SD卡中
     */ 
    public File write2SDFromInput(String path,String fileName,InputStream input){ 
        File file = null; 
        OutputStream output = null; 
        try{ 
            creatSDDir(path); 
            file = creatSDFile(path + fileName); 
            output = new FileOutputStream(file); 
            byte buffer [] = new byte[4 * 1024]; 
            while((input.read(buffer)) != -1){ 
                output.write(buffer); 
            } 
            output.flush(); 
        } 
        catch(Exception e){ 
            e.printStackTrace(); 
        } 
        finally{ 
            try{ 
                output.close(); 
            } 
            catch(Exception e){ 
                e.printStackTrace(); 
            } 
        } 
        return file; 
    } 


三、實例演示
     在對以上文件下載和SD卡訪問基本知識了解的基礎上,下面進行舉例說明:
     文件下載一般有文本文件和字節文件,不同文件下載的方式不同,但是都需要通過上面所說的一般步驟,即都需要首先得到一個InputStream對象,然後在對這個對象進行不同的操作,以下是對一個圖片文件(字節文件)進行處理,我們在以上FileUtils類的基礎上創建一個HttpDownLoader類,以供文件下載時作為工具類調用:
[java] 
public class HttpDownloader { 
    private URL url=null; 
    FileUtils fileUtils=new FileUtils(); 
    public int downfile(String urlStr,String path,String fileName) 
    { 
        if(fileUtils.isFileExist(path+fileName)) 
            {return 1;} 
        else{ 
         
        try { 
            InputStream input=null; 
            input = getInputStream(urlStr); 
            File resultFile=fileUtils.write2SDFromInput(path, fileName, input); 
            if(resultFile==null) 
            { 
                return -1; 
            } 
        } catch (IOException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
         
        } 
        return 0; 
    } 
  //由於得到一個InputStream對象是所有文件處理前必須的操作,所以將這個操作封裝成了一個方法 
       public InputStream getInputStream(String urlStr) throws IOException 
       {      
           InputStream is=null; 
            try { 
                url=new URL(urlStr); 
                HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); 
                is=urlConn.getInputStream(); 
                 
            } catch (MalformedURLException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
             
            return is; 
       } 

   下面編寫Activity文件進行文件的操作:
[java] 
public class MainActivity extends Activity { 
 
    private Button downfile=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        downfile=(Button)findViewById(R.id.downfile); 
        downfile.setOnClickListener(new View.OnClickListener() { 
        downfile.setOnClickListener(new View.OnClickListener() { 
             
            @Override 
            public void onClick(View v) { 
                // TODO Auto-generated method stub 
                HttpDownloader httpDownLoader=new HttpDownloader(); 
                  int result=httpDownLoader.downfile("http://219.216.197.96:8080/test//file.jpg", "test/", "test.jpg"); 
                  if(result==0) 
                  { 
                      Toast.makeText(MainActivity.this, "下載成功!", Toast.LENGTH_SHORT).show(); 
                  } 
                  else if(result==1) { 
                      Toast.makeText(MainActivity.this, "已有文件!", Toast.LENGTH_SHORT).show(); 
                } 
                  else if(result==-1){ 
                      Toast.makeText(MainActivity.this, "下載失敗!", Toast.LENGTH_SHORT).show(); 
                  }  
            } 
        }); 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        getMenuInflater().inflate(R.menu.activity_main, menu); 
        return true; 
    } 

 注:在編寫文件下載的IP地址時,不要用本地地址,比如:127.0.0.1,由於我在測試時用的Tomcat服務器,IP就直接用的本地地址,程序運行後一直沒有報錯,但是去SD卡中找文件時一直沒有找到文件,最後改為電腦的IP地址後問題解決了。
       上例中首先定義了一個HttpDownLoader類的對象httpdownloader,再調用該對象的downfile()方法,方法中第一個參數指的是文件下載的URL,第二個參數指的是准備存放到SD卡中的目錄,第三個參數指的是文件存放的名稱。
 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved