• 处理Assert目录读取超过1M文件


    如果Assert目录文件大于1M,在读取的过程中,会出现读出来的文件,不可用。因为Assert对文件的大小有限制,这就需要特殊处理了

      首先是将大文件分割成小文件,然后下到本地,进行合并

      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();
    			}
        		}
        }
    
    
    }
    

      

  • 相关阅读:
    [python] 类组合与聚合关系
    [python] 伪私有属性,防止变量名冲突
    [vim] 配置文件之常用命令模式
    [VIM] 编辑器---多行注释和取消注释及多行复制和黏贴
    [Visual Studio Code] 执行python
    [C] 编译器codeblocks安装注意
    字符串全排列
    集合全量子集提取
    random函数详解
    Solr常用命令总结
  • 原文地址:https://www.cnblogs.com/nanhai/p/2746088.html
Copyright © 2020-2023  润新知