处理Assert目录读取超过1M文件
2012-10-30 12:18
162 查看
如果Assert目录文件大于1M,在读取的过程中,会出现读出来的文件,不可用。因为Assert对文件的大小有限制,这就需要特殊处理了
首先是将大文件分割成小文件,然后下到本地,进行合并
1.文件的分割
首先是将大文件分割成小文件,然后下到本地,进行合并
1.文件的分割
package com.cam; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.Matrix; import android.media.ThumbnailUtils; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class TestCameraActivity extends Activity { /** Called when the activity is first created. */ private Button button1,button2; private static final int CAPTURE_CODE = 0; private static final int CAPTURE_CODE2 = 1; byte[] photo; String[] data ; String path = "/sdcard/yjtdownload/"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); AssetManager assetManager = getAssets(); try { data = assetManager.list(""); System.out.println("----------"+data.length); bind(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /**文件的分割**/ private void spletar(){ //需要分割的文件放置的路径 String path = "/sdcard/yjtdownload/"; //需要分割的文件的文件名称 String base = "office"; //需要分割的文件的后缀名 String ext = ".apk"; //以每个小文件1024*1024字节即1M的标准来分割 int split = 1024 * 1024; byte[] buf = new byte[1024]; int num = 1; //建立输入流 File inFile = new File(path + base + ext); FileInputStream fis; try { fis = new FileInputStream(inFile); while (true) { //以"demo"+num+".db"方式来命名小文件即分割后为demo1.db,demo2.db,。。。。。。 FileOutputStream fos = new FileOutputStream(new File(path + base + num + ext)); for (int i = 0; i < split / buf.length; i++) { int read; try { read = fis.read(buf); fos.write(buf, 0, read); // 判断大文件读取是否结束 if (read < buf.length) { fis.close(); fos.close(); return; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } num++; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /**文件的合并**/ private void bind(){ if (!new File(path+"aa.apk").exists()) { OutputStream out = null; try { out = new FileOutputStream(new File(path+"aa.apk") ); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] buffer = new byte[1024]; InputStream in; int readLen = 0; for(int i=0;i<data.length;i++){ // 获得输入流 ,注意文件的路径 System.out.println(i+"----合并第几个文件--------"+data[i]); try { in = TestCameraActivity.this.getAssets().open("office"+(i+1)+".apk"); while((readLen = in.read(buffer)) != -1){ out.write(buffer, 0, readLen); } out.flush(); in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 把所有小文件都进行写操作后才关闭输出流,这样就会合并为一个文件了 try { out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- 对目录内所有文件(包括子文件夹文件)读取处理
- 移动硬盘无法访问,打开提示”文件或目录损坏且无法读取”的处理方法
- PCL点云库中怎样读取指定的PCD文件,又一次命名,处理后保存到指定目录
- PHP处理Linux中生成文件目录及读取内容遍历应用
- 移动硬盘"文件或目录损坏且无法读取"可能的处理办法
- 在class文件中读取Tomcat站点的根目录
- java读取resource目录下文件的方法示例
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- linux c 读取并处理文件夹下的所有文件
- Context提供的基本文件与目录处理方式
- Android读取asset目录的文件转File
- 移动硬盘文件或目录损坏且无法读取怎么解决
- SVN 可以一次性处理多个目录中的文件
- C#读取指定目录下的config文件
- 在Linux下处理超过2GB的大文件
- Java的目录文件读取
- 批处理-统计一下当前目录中到底有多少种类型的文件
- node 异步读取文件路径处理
- dos批处理:列出指定目录下所有文件
- 移动硬盘打不开,提示“文件或目录损坏无法读取”