android中拷貝assets下的資源文件到SD卡中(可以超過1M)


很多手機游戲,在安裝APK之后都得需要下載相應的資源包,然后才能進入游戲。

有這樣一個需求:就是游戲中需要的資源包打在APK內,隨apk一起進行安裝到手機中。

這樣就不需要,在安裝APK之后,去下載資源。(這樣APK的大小就會大一些)

於是在網上就開始找對應的直接訪問隨apk一起安裝到手機中的資源。比如在assets目錄下放置了一個“test.zip”的資源。當apk安裝之后,可能我就需要訪問這個"test.zip"資源文件。(可能我會去解壓到某處)

在網上找了很長時間,說什么在assets下的資源怎么怎么不能超過1M、或者要分成多個不超過1M的小文件,然后用的時候在拼成一個大文件、說什么要用到什么數據庫。總之說的,感覺沒有一個有用的。

於是自己就實現了一個從assets下拷貝資源到sd卡中的一個功能。這里不限制非得拷貝到sd卡中。

之所以要拷貝出來,是因為在assets內的資源隨apk安裝之后,不好訪問。所以想拷貝到一個容易訪問的地方。比如是一個assets下的是一個zip文件,為需要在安裝之后進行解壓。而解壓的時候我又想使用 ant.jar (支持編碼) 。於是我先將zip資源拷貝到一個地方,然后在進行解壓。

下面代碼:

private void copyBigDataToSD(String strOutFileName) throws IOException 
    {  
        InputStream myInput;  
        OutputStream myOutput = new FileOutputStream(strOutFileName);  
        myInput = this.getAssets().open("yphone.zip");  
        byte[] buffer = new byte[1024];  
        int length = myInput.read(buffer);
        while(length > 0)
        {
            myOutput.write(buffer, 0, length); 
            length = myInput.read(buffer);
        }
        
        myOutput.flush();  
        myInput.close();  
        myOutput.close();        
    }  

備注:參數為要拷貝的目的地例如“/mnt/sdcard/test/Out.zip”;

此處“myInput = cGameActivity.getAssets().open("yphone.zip"); ”open 的是你放在assets下的資源的名稱。本例放的是一個叫"yphone.zip"的文件;

在進行測試的時候發現在資源文件很大時,例如200M左右,可能會報錯。

但可以保證的是100M一下的沒問題。

最后,此函數運行需要加權限!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM