文件切割机
2016-05-04 17:07
295 查看
文件切割
Java的文件切割实质上是利用的IO对文件进行读和写,原理很简单,只要熟练运用IO即可。
一、按大小切:
二、按数量切:
Java的文件切割实质上是利用的IO对文件进行读和写,原理很简单,只要熟练运用IO即可。
一、按大小切:
package cn.hncu.io.fileSplit; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; 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 java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import javax.swing.JFileChooser; public class FileSplit1 { /** * @param args */ public static void main(String[] args) { JFileChooser jfc=new JFileChooser(); File file=null; File dir=null; int result=jfc.showOpenDialog(null); if (result==jfc.APPROVE_OPTION){ file=jfc.getSelectedFile(); dir=new File(file.getParent(),"splitedFiles"); try { fileSplit(file,dir);//切割 String fileName=file.getName(); fileMerge(fileName,dir);//合并 } catch (IOException e) { e.printStackTrace(); } } } private static void fileMerge(String fileName, File dir) throws IOException { if (!dir.exists()){ throw new RuntimeException(dir.getName()+" do not exists"); } File partFiles[]=dir.listFiles(); if (partFiles.length==0){ throw new RuntimeException(dir.getName()+" has not files"); } BufferedInputStream bis=null; ArrayList<BufferedInputStream> list=new ArrayList<BufferedInputStream>(); for (int i=0;i<partFiles.length;i++){ bis = new BufferedInputStream(new FileInputStream(dir.getName()+"\\"+partFiles[i].getName())); list.add(bis); } Enumeration<BufferedInputStream> en=Collections.enumeration(list); SequenceInputStream sis=new SequenceInputStream(en); BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(dir.getName()+"\\"+fileName)); int len=0; byte buf[]=new byte[10240]; while ((len=sis.read(buf))!=-1){ bos.write(buf,0,len); } bos.close(); bis.close(); sis.close(); } private static void fileSplit(File file, File dir) throws IOException { if (!dir.exists()){ dir.mkdirs(); } InputStream in=new BufferedInputStream(new FileInputStream(file)); OutputStream out=null; byte[] buf=new byte[10240]; int len=0; int index=1; int endIndex=file.getName().indexOf("."); String fileName=file.getName().substring(0, endIndex); while ((len=in.read(buf))!=-1){ out=new BufferedOutputStream(new FileOutputStream(dir.getName()+"\\"+fileName+(index++)+".part")); out.write(buf, 0, len); } out.close(); in.close(); } }
二、按数量切:
package cn.hncu.io.fileSplit; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; 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.util.logging.Logger; import javax.swing.JFileChooser; public class FileSplitByQuantity { /** * @param args */ public static void main(String[] args) { int quantity=10;//要切成的数量 JFileChooser jfc=new JFileChooser(); int result=jfc.showOpenDialog(null); File file=null; File dir=null; if (result==jfc.APPROVE_OPTION){ file=jfc.getSelectedFile(); dir=new File(file.getParent(),"splitedByQuantity"); try { fileSplit(file,dir,quantity); } catch (IOException e) { e.printStackTrace(); } } } private static void fileSplit(File file, File dir, int quantity) throws IOException { if (!dir.exists()){ dir.mkdirs(); } FileInputStream fis=new FileInputStream(file); InputStream in=new BufferedInputStream(fis); long length=file.length(); int l=(int)(length/quantity+1); byte buf[]=new byte[l]; int len=0; FileOutputStream fos=null; //定新文件名前缀 int index=1; int endIndex=file.getName().indexOf("."); String fileName=file.getName().substring(0, endIndex); while ((len=in.read(buf))!=-1){ fos=new FileOutputStream(new File(dir, fileName+(index++)+".part")); BufferedOutputStream bos=new BufferedOutputStream(fos); bos.write(buf, 0, len); bos.close(); fos.close(); } fis.close(); in.close(); } }注意:对于输出流,如果加了缓冲流要先关缓冲流再关字节流或其他流;对于输入流,若加了缓冲流则先关字节流或其他再关缓冲流。
相关文章推荐
- 附件下载功能
- Spring @Resource、@Autowired、@Qualifier的注解注入及区别
- Ajax复选框多选删除的实现
- nctf-php
- sql基础知识-----主外键、参照完整性
- 深入Spring
- hdu 1937(尺取法)
- centos 70 在vmware中安装笔记
- 内建模块-HTMLParser
- android 基础 @SuppressLint("NewApi")和@TargetApi()的作用与区别
- Shiro 如何主动调用doGetAuthorizationInfo方法
- Java加密技术(二)——对称加密算法DES&AES
- Qt Gui使用(二)
- 关于swift - 网络请求+MD5,混合编程
- Unreal Engine 4 —— Post Process Shader练手(第二弹)
- 字符串模式匹配中BF算法和KMP算法的java实现
- Unreal Engine 4 —— Post Process Shader练手(第二弹)
- 自定义QItemDelegate实现带CheckBox复选框的自增ID表格列
- 关于CollectionView的九宫格排布,多选,全选实现及删除
- 磁盘阵列恢复方法以及注意事项