根据给定分割文件的分数进行进行分割与使用配置文件合并文件

package cn.mytext.ref;

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.PrintStream;

import java.io.SequenceInputStream;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Enumeration;

import java.util.Properties;

public class SplitFile {

public static void main(String[] args) throws IOException {

String src = "d:\\1.bmp";

splitFile(src);

}

//根据指定的份数分割文件

private static void splitFile(String fileName) throws IOException {

File src = new File(fileName);//获取源文件

if(!src.exists())//判断源文件是否存在

{

throw new RuntimeException("文件不存在");

}

long src_size = src.length();//获取源文件的大小

long split_size = src_size / 3;//获取分割后每一份文件的大小

BufferedInputStream bis = new BufferedInputStream(

new FileInputStream(src));//实例化缓冲输入流对象

BufferedOutputStream bos = null;//声明名缓冲输出流

int len = 0;//读取到文件大小

byte[] buf = new byte[1024*1024];//定义缓冲区

String src_name = src.getName()+"-";//获取源文件名

File dest = new File("d:\\Image");//输出文件的目录

File config = new File(dest,"config.properties");//声明配置文件

if(!config.exists())//判断配置文件是否存在

{

config.createNewFile();//创建配置文件

}

Properties prop = new Properties();//配置文件集合

int count = 1;//记录当前文件的分数

File new_file = null;

System.out.println("开始分割文件");

//进行读写操作

while((len = bis.read(buf))!=-1)//读取数据

{

if(new_file == null)//判断输出文件是否被实例化

{

new_file = new File(dest,src_name+count+".part");//创建分割文件

bos = new BufferedOutputStream(new FileOutputStream(new_file));//输出流与分割文件相关联

prop.setProperty(Integer.toString(count), new_file.getName());//定义集合的建和值

}

if(new_file.length()>=split_size)//判断当前的分割文件是否达到定义分割的大小

{

System.out.println(new_file.getName()+":done");//打印当前完成的分割文件

count++;//为新创建的分割文件序号+1

new_file = new File(dest,src_name+count+".part");//创建新的分割文件

bos = new BufferedOutputStream(new FileOutputStream(new_file));//输出流与分割文件相关联

prop.setProperty(Integer.toString(count), new_file.getName());//定义集合的建和值

}

bos.write(buf, 0, len);//写入数据

bos.flush();//刷新缓冲区

}

if(len == -1)//由于最后一份有可能小于分割的大小,导致无法打印。

{

System.out.println(new_file.getName()+":done");//打印当前完成的分割文件

}

//关闭流

bos.close();

bis.close();

//把集合的信息持久化

prop.store(new FileOutputStream(config), "config_file");

}

//合并文件

private static void mergeFile(String dest,String pro_file) throws FileNotFoundException, IOException {

//1,获取配置文件

File destFile = new File(dest);//获取给定目录

File config = new File(dest,pro_file);//获取配置文件

//2,将配置文件的信息读取到集合中

Properties prop = new Properties();//创建配置文件集合

prop.load(new FileInputStream(config));//集合与配置文件相关联

//3,获取对应键的值

System.out.println(prop.size());//打印当前集合的长度

String srcFileName = (String)prop.get("1");//获取源文件名

srcFileName = srcFileName.substring(0, srcFileName.lastIndexOf("-"));//截取文件名

File srcFile = new File(new File(dest),srcFileName);//创建合并后的文件

if(!srcFile.exists())//判断文件是否存在

{

srcFile.createNewFile();//不存在则创建

}

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(srcFile));//合成文件与输出流相关联

ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();//创建集合对象

String file_num = new String();//定义读取的键

for(int i = 1; i<= prop.size(); i++)

{

file_num = Integer.toString(i);

String file_name = (String)prop.get(file_num);//根据相应的键获取对应的值

System.out.println(file_name);//打印当前的值

File part_file = new File(destFile,file_name);//获取对应键的文件名

al.add(new FileInputStream(part_file));//将新加输入文件流添加到集合

}

//4,获取值信息是使用流合并

Enumeration<FileInputStream> en = Collections.enumeration(al);

SequenceInputStream sis = new SequenceInputStream(en);

byte[] buf = new byte[1024];

int len = 0;

while((len = sis.read(buf))!=-1)

{

bos.write(buf, 0, len);

bos.flush();

}

bos.close();

sis.close();

}

}

时间: 2025-01-13 00:22:19

根据给定分割文件的分数进行进行分割与使用配置文件合并文件的相关文章

java分割文件并且合并文件(zip,rar....)

JAVA分割文件,把一个ZIP文件通过指定的大小分割,然后合并起来. 分割 package com.zkq.objectstream; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil

Linux下分割、合并文件——dd和cat

功能说明:读取,转换并输出数据. 语 法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][–help][–version] 补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或

给定一个百分制的分数,输出相应的等级。

给定一个百分制的分数,输出相应的等级.         90分以上        A级         80~89          B级         70~79          C级        60~69          D级         60分以下        E级 解决方法: import java.util.*; class Mark{ public static void main(String []args){ System.out.println("please

Linux下分割与合并文件的方法

Linux下分割与合并文件的方法 切割合并文件在linux下用split和cat就可以完成.下面举些实例进行说明.1.文件切割文件切割模式分为两种: 文本文件 二进制模式. 1.1文本模式文本模式只适用于文本文件,用这种模式切割后的每个文件都是可读的.文本模式又分为两种:     按最大文件大小切割:     按文本行数切割. 1.1.1最大文件大小切割 split -C 5k duanxin split 将文本文件duanxin按每块最大5k的大小进行切割,不打碎行.输出文件名类似splita

分割和合并文件

造冰箱的大熊猫,本文适用于Linux和[email protected] 2018/12/19 用FAT32文件格式的优盘复制文件时,需要注意文件大小不能超过4GB(我曾经有过一次这样的尴尬经历:在计算机A上将一个压缩文件复制到优盘上.在计算机B上打开该文件时,提示压缩包数据错误.以为是下载文件时出现了问题,于是回到计算机A重新下载,重新复制到优盘,但在计算机B上再次打开文件时依然提示压缩包数据错误.一番折腾之后才突然意识到是文件大小与优盘文件格式不匹配.复制文件到优盘上时,操作系统并没有提示文

linux下分割合并文件命令

分割与合并文件操作. 分割与合并文件 有时候大文件分割后更方便传输.以一张图片为例:分割:默认分割 12345678910111213 [[email protected] shell]$ ls -lh总用量 1.5M-rwxrwxrwx 1 jimo jimo 1.5M 9月 17 20:31 1.png[[email protected] shell]$ split 1.png [[email protected] shell]$ ls -lh总用量 2.9M-rwxrwxrwx 1 jim

《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的

0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述,很难给人以形象化的认知,看完之后感觉还是稀里糊涂的. 感于以上的种种,我打算把我在学习JVM虚拟机的过程中学到的东西,结合自己的理解,总结成<Java虚拟机原理图解> 这个系列,以图解的形式,将抽象的JVM虚拟机的知识具体化,希望能够对想了解Java虚拟机原理的的Java程序员 提供点帮助. 读

python 按照日期切分大日志文件(重点)和按照指定大小切分日志文件

#! /usr/bin/env python # -*- coding:utf8 -*- # 切分nginx 按照日期切分日志文件 from __future__ import division import os,sys big_file='/data/logs/media.net.error.log' # 按照文件大小拆分 def split_by_filesize(fromfile,todir,chunksize=0): """ chunksize: 字节建议每100M

R语言︱文件读入、读出一些方法罗列(批量xlsx文件、数据库、文本txt、文件夹)

笔者寄语:小规模的读取数据的方法较为简单并且多样,但是,批量读取目前看到有以下几种方法:xlsx包.RODBC包.批量转化成csv后读入. R语言中还有一些其他较为普遍的读入,比如代码包,R文件,工作空间等. source  #读取R代码dget    #读取R文件load    #读取工作空间 -------------------------------- SPSS-STATA格式的读入包--foreign 读取其他软件的格式foreigninstall.packages("foreign&