java io大文件_JavaIO流对大文件进行分割与合并

对于大文件传输不方便时候可以试一下分割之后再操作:

package com.lym;

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;

/**

* 1、实现一个文件分割器,把一个大文件分割成若干个小文件(可根据情况自行设计),

* 分割后的文件扩展名为dat,文件名为:原文件名+原扩展名+编号+.dat

* 2、把分割后的文件再合并(文件还原)成完整文件,与源文件一致。

* @author lym

*

*/

public class Homework2 {

/**

* 文件分割

* @param src 源文件路径

* @param fileSize 分割后每个文件的大小,单位是MB

* @param dest 目标文件路径

*/

public static void split(String src,int fileSize,String dest){

if("".equals(src)||src==null||fileSize==0||"".equals(dest)||dest==null){

System.out.println("分割失败");

}

File srcFile = new File(src);//源文件

long srcSize = srcFile.length();//源文件的大小

long destSize = 1024*1024*fileSize;//目标文件的大小(分割后每个文件的大小)

int number = (int)(srcSize/destSize);

number = srcSize%destSize==0?number:number+1;//分割后文件的数目

String fileName = src.substring(src.lastIndexOf("\\"));//源文件名

InputStream in = null;//输入字节流

BufferedInputStream bis = null;//输入缓冲流

byte[] bytes = new byte[1024*1024];//每次读取文件的大小为1MB

int len = -1;//每次读取的长度值

try {

in = new FileInputStream(srcFile);

bis = new BufferedInputStream(in);

for(int i=0;i

String destName = dest+File.separator+fileName+"-"+i+".dat";

OutputStream out = new FileOutputStream(destName);

BufferedOutputStream bos = new BufferedOutputStream(out);

int count = 0;

while((len = bis.read(bytes))!=-1){

bos.write(bytes, 0, len);//把字节数据写入目标文件中

count+=len;

if(count>=destSize){

break;

}

}

bos.flush();//刷新

bos.close();

out.close();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

//关闭流

try {

if(bis!=null)bis.close();

if(in!=null)in.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 文件合并

* 注意:在拼接文件路劲时,一定不要忘记文件的跟路径,否则复制不成功

* @param destPath 目标目录

* @param srcPaths 源文件目录

*/

public static void merge(String destPath,String ... srcPaths){

if(destPath==null||"".equals(destPath)||srcPaths==null){

System.out.println("合并失败");

}

for (String string : srcPaths) {

if("".equals(string)||string==null)

System.out.println("合并失败");

}

//合并后的文件名

String name = srcPaths[0].substring(srcPaths[0].lastIndexOf("\\"));

String destName = name.substring(0, name.lastIndexOf("-"));

destPath = destPath+destName;//合并后的文件路径

File destFile = new File(destPath);//合并后的文件

OutputStream out = null;

BufferedOutputStream bos = null;

try {

out = new FileOutputStream(destFile);

bos = new BufferedOutputStream(out);

for (String src : srcPaths) {

File srcFile = new File(src);

InputStream in = new FileInputStream(srcFile);

BufferedInputStream bis = new BufferedInputStream(in);

byte[] bytes = new byte[1024*1024];

int len = -1;

while((len = bis.read(bytes))!=-1){

bos.write(bytes, 0, len);

}

bis.close();

in.close();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

//关闭流

try {

if(bos!=null)bos.close();

if(out!=null)out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) {

/**

* 分割测试

*/

// String src = "E:\\API\\JDK_API_1_6_zh_CN.CHM";//要分割的大文件

// int fileSize = 10;

// String dest = "D:\\";//文件分割后保存的路径

// System.out.println("分割开始。。。");

// split(src, fileSize, dest);

// System.out.println("分割完成");

/**

* 合并测试

*/

//合并后文件的保存路径

String destPath = "D:\\upan";

//要合并的文件路径

String[] srcPaths = {

"D:\\JDK_API_1_6_zh_CN.CHM-0.dat",

"D:\\JDK_API_1_6_zh_CN.CHM-1.dat",

"D:\\JDK_API_1_6_zh_CN.CHM-2.dat",

"D:\\JDK_API_1_6_zh_CN.CHM-3.dat"};

System.out.println("开始合并。。。");

merge(destPath, srcPaths);

System.out.println("合并结束");

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邻接矩阵和邻接表_[力扣743] 带权邻接表的单源最短路

题目链接743. 网络延迟时间 题目描述有 N 个网络节点,标记为 1 到 N。给定一个列表 times,表示信号经过有向边的传递时间。 times[i] (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的…

opencv java ubuntu_Ubuntu 16.04配置OpenCV 3.1.0 for Java

我们都知道,OpenCV是基于C的开源计算机视觉库,但是从2.4.4版本开始提供了Java绑定,也就是说,我们也可以使用Java来开发基于OpenCV的计算机视觉应用。目前,最新的版本是3.1.0,在本文中将会介绍如何中Ubuntu …

service 层 拼接的html 代码如何直接返回_字符串拼接,会走StringBuilder 吗?

前言最近在突然想到了String字符串拼接问题,于是做了一个demo测试了一下,到底String类型的字符串在拼接的时候,哪种情况下会走会走StringBulider进行字符串拼接,而哪种情况编译器会对代码进行优化?话不多说&#xff0c…

迁移学习训练集准确率一直上不去_可以提高你的图像识别模型准确率的7个技巧...

假定,你已经收集了一个数据集,建立了一个神经网络,并训练了您的模型。但是,尽管你投入了数小时(有时是数天)的工作来创建这个模型,它还是能得到50-70%的准确率。这肯定不是你所期望的。下面是一些提高模型性能指标的策…

华为云客户端_华为公布云手机计费清单,要不要光刻机也给出了答案

华为云手机一出来,大家的好奇心就上来了。这就是解决华为无芯片的代替方案。纷纷说道,可以绕开光刻机,光刻机瞬间变废铁。当时我还发布过文章分析:现在的云手机只是一个云端应用,并不是真正的云手机。需要在手机或电脑…

java 柱状图 宽度_Java实现 LeetCode 84 柱状图中最大得矩形

84. 柱状图中最大的矩形给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为…

python坐标轴刻度设置对数_用对数刻度设置刻度

我将添加一些图并显示如何删除较小的刻度线:OP:from matplotlib import pyplot as pltfig1, ax1 plt.subplots()ax1.plot([10, 100, 1000], [1,2,3])ax1.set_xscale(log)ax1.set_xticks([20, 300, 500])plt.show()如tcaswell所指出的,要添加…

java中为什么要用注解_java中的注解,真的很重要,你理解了嘛?

这篇文章开始讲解java中的注解,在平时的开发当中我相信你或多或少的接触过注解。比如你可能都见过override,它代表的就是一个注解。但是,为了更加清晰的去介绍注解,我还是先给出一个例子,让你能够方便的理解。一、认识…

qtdesigner右击按钮没有 to slot_或添加“力感按钮”再升级,Apple Pencil会更“能打”?...

[钉科技编译]“I have a pen/I have an apple/Ah apple pen”,钉科技编辑写到的这些“歌词”,看上去是不是很熟悉?对了,这是搞笑艺人Piko Taro那支颇“洗脑”的《PPAP》里的内容。其实,如果说到…

android jni 调用java_Android 基于NDK的JNI开发 C调用java和java调用C

首先,这里所要讲的主要是C调用java的,因为这里网上也没有一个详细的资料,其次,我开发android应用没多久,其中java错误敬请谅解!关于配置NDK环境问题应该不用再赘述了,这个网上有很多&#xff0c…

python手绘教学_Python实现手绘功能

手绘图确实很好看,但对于手残党的我,只能呵呵一笑,今天就用代码来实现手绘功能,把普通的图片转换为手绘图片。代码from PIL import Imageimport numpy as npa np.asarray(Image.open(rC:\Users\luopan\Desktop\1.jpg).convert(L)…

java三级报名_java web 学习 --第四天(Java三级考试)

jsp内置对象 outout属性类型:JspWriter 作用域:page 作用:一个输出缓存流,向客户端浏览器输出信息JspWriter类中常用的方法和功能flush() 输出缓存区的数据close() 关闭输出流clearBuffer() 清除缓存区的数据,并把数据…

面试pythone_python面试常见问题有哪些

python面试常见问题有:1、Python是如何被解释的;2、什么是PEP8;3、Python是怎样管理内存的;4、什么是Python装饰器;5、Python提供哪些内置类型等等。大量免费学习推荐,敬请访问python教程(视频)python面试常…

tlab java_浅析java中的TLAB

好久,好久....没有更博客了。这一次利用闲暇时间,来扯一下关于JVM中的TLAB。什么是TLAB?它是干什么的?咋们先抛开这个问题,一切的开始得从new对象到指针碰撞开始讲起。new对象与指针碰撞new对象怎么就出问题了呢&#…

选择排序算法流程图_常用排序算法之选择排序

前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序。选择排序选择排序和插入排序很相似,也区分已排序区间和未排序区间,选择排序是每次从未排序区间…

pygame小游戏代码_Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏...

Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏目录输出结果实现代码输出结果​实现代码# -*- coding: utf-8 -*-#Py之pygame:有趣好玩——利用pygame库实现一个移动底座弹球的小游戏import pygame as pg from pygame.locals import …

java 小题目_java一个小题目

1.给定一个字符串String s"abcdefg";将字符串倒序成一个新字符串2.判断一个字符串是不是回文字符串 比如:"abcdcba" "上海自来水来自海上"1.解Java代码package com.newer.cjl.api;public class zuoye1 {public static void main(Stri…

python中字典的输出序列_python3:序列_字典(常用基础知识)

#字典:字典:无序的、可变的序列,也称关联数组,或散列表①格式{键:值}②通过键读取元素③字典是任意对象的无序集合④字典可任意嵌套,如元素可以为列表、字典、列表的列表等⑤字典的键必须是唯一的。不可重复&#xff0…

jenkins 集成java搅拌_如何将Gauge与Jenkins集成

我对Gauge测试工具有点熟悉,现在我正在通过Jenkins执行它 .首先:我在"Execute Windows Batch Command"字段中设置 gauge --version . 这是输出:Started by user anonymousBuilding in workspace C:\jenkins\workspace\Run_Gauge_Te…

大学生python实验心得体会_大学生实训心得体会3篇

转眼间为期两个星期的实训就结束了,但是安利公司的物流配送、黄埔港、益邦物流公司、南沙港以及学校里面的航海模拟实验中心、轮机实训实验楼这些实训过程仍历历在目。以下是小编整理的大学生实训心得体会,欢迎阅读。大学生实训心得体会1通过实训中心老师…