`
endual
  • 浏览: 3512896 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 文件的分割和合并

    博客分类:
  • java
 
阅读更多

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


}
 

 

 

项目的截图:

 


 

 

  • 大小: 10.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics