在android的应用中要用的
android的应用,如果数据库外置,需要将数据库在第一次运行运用的时候复制到数据库文件夹中。
而assert文件夹无法将大于1M的数据库复制到手机的数据库文件中的,所以要首先对文件进行分割
文件的分割:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class ManFile_1 {
public static void main(String[] args) throws Exception {
// 大文件放置的路径
String path = "file1/";
// 大文件的文件名称
String base = "icta";
String ext = ".db";
// 以每个小文件1024*512字节即1M的标准来分割
int split = 1024 * 150;
byte[] buf = new byte[1024 * 50];//每次读取的大小
int num = 1;
// 建立输入流
File inFile = new File(path + base + ext);
System.out.println(inFile.getName());
FileInputStream 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++) {
System.out.println("---");
int read = fis.read(buf);
//fis.read(null) ;
System.out.println(read);
fos.write(buf, 0, read);
// 判断大文件读取是否结束
if (read < buf.length) {
fis.close();
fos.close();
return;
}
}
fos.close();
num++;
}
}
}
分割的使用说明:
// 以每个小文件1024*512字节即1M的标准来分割
int split = 1024 * 150;
byte[] buf = new byte[1024 * 50];//每次读取的大小
split 表示每个分割的文件最大存放大学,buf 表示读取的大小(分割到每个文件中,读取原来的文件要多次,
而每次读取的大学就是buf)
例如:我们要分割800kb的文件为4个文件夹,那么可以设置split 为1024 * 200 (buf的大小必须小于split的)
其他的探索,看下代码就知道了。
合并程序就简单了,无需修改,只需要你对应好文件的名字就可以了:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
public class ToFiles {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
mergeApkFile() ;
}
/**
* 合并文件
*
* @param c
* @param partFileList 小文件名集合
* @param dst 目标文件路径
* @throws IOException
*
* @author zuolongsnail
*/
private static void mergeApkFile() throws Exception{
File fileto = new File("file2/icta.db") ;
File[] files = null;
if (!fileto.exists()) {
fileto.createNewFile() ;
System.out.println("----");
OutputStream out = new FileOutputStream(fileto);
byte[] buffer = new byte[1024];
File file = new File("file1") ;
files = file.listFiles() ;
System.out.println(files.length);
InputStream in;
int readLen = 0;
for(int i=0; i < files.length; i++){
// 获得输入流
// in = c.getAssets().open(partFileList.get(i));
in = new FileInputStream(files[i]) ;
while((readLen = in.read(buffer)) != -1){
out.write(buffer, 0, readLen);
}
out.flush();
in.close();
}
// 把所有小文件都进行写操作后才关闭输出流,这样就会合并为一个文件了
out.close();
}
}
}
项目的截图: