java流操作对文件的分割和合并

学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。

大家好,又见面了,我是全栈君。

     学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并。

    下面是代码:


<span style="font-size:14px;">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("合并完成!");
	}
}
</span>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121286.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月24日 下午12:00
下一篇 2022年2月24日 下午12:00


相关推荐

  • evolution configure

    evolution configure

    2022年3月11日
    48
  • Java构造函数调用顺序问题

    Java构造函数调用顺序问题java构造代码调用顺序研究。

    2022年6月22日
    29
  • weblogic EJB 学习

    weblogic EJB 学习EJB学习笔记1、ejb基础知识(1)无状态会话bean不保存客户机的会话状态优点:使用小量的实例即可满足大量的客户。每个实例都没有标识,相互之间是等价的。等?的无状态会话bean:多次和一次调用的结果和效应相同。在集群中可以负载均衡a机器失败,可以在b机器上重试非等?的无状态会话bean:如:计数器…

    2022年9月30日
    4
  • 从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师![通俗易懂]

    从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师![通俗易懂]之前有不少小伙伴留言和私信我关于大数据学习路线,以及咨询我一些关于有工作经验想转行大数据的问题,只言片语也讲不清。我花了一个月整理了一份我当初学习的大数据学习路线,从最基础的大数据集群搭建开始,希望能帮助到大家。

    2022年5月23日
    45
  • 点击率预估算法:FM与FFM[通俗易懂]

    点击率预估算法:FM与FFM[通俗易懂]点击率预估算法:FFM@(计算广告)[计算广告]点击率预估算法FFM1FM1背景11线性模型12二项式模型2FM21FM基本原理22数据分析23参数个数24计算时间复杂度25梯度26训练时间复杂度2FFM1背景及基本原理2模型与最优化问题21模型22最优化问题23自适应学习率24FFM算法的最终形式3完整算法流程31计算梯度32

    2022年4月30日
    84
  • sql语句的执行顺序

    sql语句的执行顺序理解 sql 语句的执行顺序对优化 sql 非常重要 那么 sql 语句的执行顺序是怎样的呢 以一条简单的的语句做分析 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 这一条语句包含我们经常用到的一些关键字 select from where groupby orderby 它的执行顺序如下 先执行 from 关键字后面的语句 明确数据的来源 它是从哪张表取来的 接着执行 where 关键字后面的语句 对数据进行筛选 再接

    2026年3月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号