java 文件的分割和合并
16lz
2021-01-26
在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 stubmergeApkFile() ;}/** * 合并文件 * * @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(); } } }
项目的截图:
更多相关文章
- Android(安卓)Protect-0.签名相关
- 【Android测试】Android抓包解析全过程
- android核心基础(10)_apk安装过程
- 如何添加 android private libraries 中的包的源代码
- android mk文件编写
- android properties
- Android(安卓)自定义控件-SnakeLayout (仿gallery)
- ADB源码分析
- JFrame实现批量获取Android安装包安全证书MD5