java 读取1m文件_处理Assert目录读取超过1M文件

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

ba8a39bb6a9b2e8b5aad11bf731c910d.png

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

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

// 获得输入流 ,注意文件的路径

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

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值