java 流操作对文件的分割和合并的实例详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习
java 流操作对文件的分割和合并的实例详解
学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。
下面是代码:
package com.dufy.file; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; /** * 文件的切割和合并 * 1.要切割和合并文件:主要考虑的就是文件的源地址,目标地址,暂存文件地址和文件名称 * 2.切割文件:判断给的暂存地址是否存在,不存在,则创建;从源地址中读出文件,按照给定的大小进行文件的切割操作放入暂存地址中 * 3.合并文件:判断给定的目标地址是否存在,不存在,则创建;定义List集合将暂存地址中的文件全部读取出来,放到list集合中 * 然后使用Enumeration列举出所有文件,合并流合并文件 * 最后写入到目标的地址中 * 注:本例子中所有的异常都采用抛出的方式处理 * @author aflyun * */ public class TestFileCutUnion { public static void main(String[] args) throws IOException { String fSrc = "D:/1.jpg";//源文件的目录 String fDir = "D:/1";//目标文件的目录 String fTemp = "D:/2";//暂存文件的目录 File srcFile = new File(fSrc); File dirFile = new File(fDir); File tempFile = new File(fTemp); String fileName = srcFile.getName();//获取文件的名称 cutFile(srcFile,tempFile);//调用分割方法 unionFile(dirFile,tempFile,fileName);//调用合并方法 } /** * 切割文件 * @param srcFile * @param tempFile * @throws IOException */ public static void cutFile(File srcFile, File tempFile) throws IOException { //读取源地址文件 FileInputStream fis = new FileInputStream(srcFile); FileOutputStream fos = null; //是否为文件,不是就创建 if(!tempFile.isFile()){ tempFile.mkdirs(); } byte[] b = new byte[100]; int len =0; int count = 0; while((len=fis.read(b)) != -1){ int num = count++; //写入暂存地址目录中 fos = new FileOutputStream(new File(tempFile, num+".part")); fos.write(b, 0, len); } fos.flush(); fos.close(); fis.close(); System.out.println("分割完成!"); } /** * 合并文件 * @param dirFile * @param tempFile * @param fileName * @throws IOException */ public static void unionFile(File dirFile, File tempFile, String fileName) throws IOException { //判断目标地址是否存在,不存在则创建 if(!dirFile.isFile()){ dirFile.mkdirs(); } List<FileInputStream> list = new ArrayList<FileInputStream>(); //获取暂存地址中的文件 File[] files = tempFile.listFiles(); for (int i = 0; i < files.length; i++) { //用FileInputStream读取放入list集合 list.add(new FileInputStream(new File(tempFile, i+".part"))); } //使用 Enumeration(列举) 将文件全部列举出来 Enumeration<FileInputStream> eum = Collections.enumeration(list); //SequenceInputStream合并流 合并文件 SequenceInputStream sis = new SequenceInputStream(eum); FileOutputStream fos = new FileOutputStream(new File(dirFile, fileName)); byte[] by = new byte[100]; int len; while((len=sis.read(by)) != -1){ fos.write(by, 0, len); } fos.flush(); fos.close(); sis.close(); System.out.println("合并完成!"); } }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
原文地址是:http://www.piaodoo.com/thread-13236-1-2.html 丝袜控www.txdah.com 131www.buzc.org学习之外可赏心悦目有助更好地学习!
java 流操作对文件的分割和合并的实例详解_java - JAVA的更多相关文章
- 事件驱动模型实例详解(Java篇)
或许每个软件从业者都有从学习控制台应用程序到学习可视化编程的转变过程,控制台应用程序的优点在于可以方便的练习某个语言的语法和开发习惯(如.net和java),而可视化编程的学习又可以非常方便开发出各类 ...
- Java使用wait() notify()方法操作共享资源详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方 ...
- Java AtomicInteger类的使用方法详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Samp ...
- springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
- Struts 2 配置Action详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 实现了Action处理类之后,就可以在struts.xml中配置该Action,从而让Struts 2框架知道哪个Act ...
- Jdbc连接数据库基本步骤详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 Jdbc连接数据库的基本步骤,供大家参考,具体内容如下 package demo.jdbc; import java.s ...
- Java笔记:Java 流(Stream)、文件(File)和IO
更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...
- Java总结:Java 流(Stream)、文件(File)和IO
更新时间:2018-1-7 12:27:21 更多请查看在线文集:http://android.52fhy.com/java/index.html java.io 包几乎包含了所有操作输入.输出需要的 ...
- Java-使用IO流对大文件进行分割和分割后的合并
有的时候我们想要操作的文件很大,比如:我们想要上传一个大文件,但是收到上传文件大小的限制,无法上传,这是我们可以将一个大的文件分割成若干个小文件进行操作,然后再把小文件还原成源文件.分割后的每个小文件 ...
随机推荐
- WebSocket-Node
WebSocket Client & Server Implementation for Node 参考资料:[https://github.com/theturtle32/WebSocket ...
- golang init方法和main方法初始化顺序
init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法.现在我们就讲一种通用的情况:main 包下 导入了 init2 包而在init2 包下又 ...
- tail命令 查看文件尾部 输出文件后n行,默认查看文件的后10行
tail命令 查看文件尾部 用于查看日志 默认查看文件的后10行 -n 3 数字 也可以忽略-n 直接加数字 tail 3 查看文件后3行 [root@localhost ~]# tail /e ...
- LOCATE()和FIND_IN_SET()
locate(substr,str) 查找substr在str中第一次出现的位置,为空时返回0 SELECT login_name, LOCATE('ning',login_name) FROM us ...
- window环境安装composer
今天在下载symfony2的框架的时候,发现要用到composer,因为之前笔者完全没有接触过composer,所以研究了很久之后,才终于安装完成 由于网上有各种资料介绍如何安装composer的,但 ...
- lnmp 中的laravel出现白屏的处理办法
find / |grep fastcgi_params 其实是找fastcgi_params这个文件编辑 如果在知道目录的情况下也可以直接 vi /usr/local/nginx/conf/fastc ...
- Delphi 逻辑运算符与布尔表达式
- ARIMA模型
ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),时间序 ...
- Laravel 向公共模板赋值
开发过程中许多时候都会向公共模板赋值,比如顶部导航栏,页面底部等等,不可能在每个控制器中都赋值一遍. Laravel 中解决办法如下:修改 App\Providers\AppServiceProvid ...
- .NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标。请确保在计算机上安装了 Visual Studio 2008
今天在Visual Studio2010下面开发C++应用的时候发现“.NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标.请确保在计算机上安装了 Visual Stud ...