JAVA简单图片分割器
更新时间:2023-05-11 02:37:01 阅读量: 实用文档 文档下载
java小程序
将一个图片切割成多个文件。在将多个文件合并成该图片
1,通过字节流读取该图片。定义一个缓冲区数组该数组的大小 是要生成的切割后的文件大小。
通过输出流将该数组中的数据,写到一个文件中(文件名要有规律。1.haha 2.haha...)
(可以通过一个自定义配置文件保存原文件的基本属性信息。如:源文件的名字 已经切割出来的碎片文件的个数。方便合并。)
2,合并,首先要知道碎片文件的目录,列出该目录当前的所有.haha文件。(遍历时可以通过配置文件中的信息确定循环的次数。)
并按照顺序把每一个碎片文件用流读取。(一个文件对应一个流。)
将这些流存入集合。(why?因为要通过序列流进行合并。(SequenceInputStream)该流会接受一个Enumeration)
3,读取序列流中的数据,并把该数据都写入到一个(图片)文件中。
*/
import java.io.*;
/*文件分割类,
1.通过流的形式读取源数据
2.通过定义一个固定的字节数组,实现文件分割
a,用FileInputStream读取源文件
b,通过一个字节数组作为中介存储
c,把读取到的数据写入到一个新文件
3.把原来的文件名和分割的个数写入到一个配置文件中
*/
import java.io.*;
/*文件分割类,
1.通过流的形式读取源数据
2.通过定义一个固定的字节数组,实现文件分割
a,用FileInputStream读取源文件
b,通过一个字节数组作为中介存储
c,把读取到的数据写入到一个新文件
3.把原来的文件名和分割的个数写入到一个配置文件中
*/
import java.io.*;
/*文件分割类,
1.通过流的形式读取源数据
2.通过定义一个固定的字节数组,实现文件分割
a,用FileInputStream读取源文件
b,通过一个字节数组作为中介存储
c,把读取到的数据写入到一个新文件
3.把原来的文件名和分割的个数写入到一个配置文件中
*/
import java.io.*;
import java.util.*;
/*文件分割类,
1.通过流的形式读取源数据
2.通过定义一个固定的字节数组,实现文件分割
a,用FileInputStream读取源文件
b,通过一个字节数组作为中介存储
c,把读取到的数据写入到一个新文件
3.把原来的文件名和分割的个数写入到一个配置文件中
*/
class FileSplit
{
private File f;
private FileInputStream fis;
private FileOutputStream fos;
priv
ate String fileName;
int count;
//传入要分割的文件路径
FileSplit( String s )
{
f=new File( s );
fileName=s;
count=0;
}
java小程序
public void split()
{
try
{
fis=new FileInputStream( f );
byte buf[]=new byte[1024*256];
int num=0;
while( ( num=fis.read( buf ) )!=-1 )
{
//创建一个临时的分割文件对象
if( createSplitFile( buf, 0, num )==-1 )
{
return;
}
count++;
}
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
//关闭输入流
if( fis!=null )
{
try
{
fis.close();
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
//创建配置文件“file.ini”,其中格式为“文件个数>文件名”
createInfoFile();
System.out.println( "文件分割成功" );
}
////创建一个临时的分割文件对象,如果返回-1表示创建失败,
//程序退出
private int createSplitFile( byte buf[],int zero,int num )
{
//创建临时的文件对象
FileOutputStream fosTemp=null;
try
{
fosTemp=new FileOutputStream( count+".haha" );
fosTemp.write( buf,zero,num );
fosTemp.flush();
}
catch( IOException e )
{
System.out.println( "文件"+count+".haha创建失败" );
return -1;
}
finally
{
//关闭输出流
try
{
fosTemp.close();
}
catch( IOException e )
{
e.printStackTrace();
}
}
return 1;
}
//创建配置文件“file.ini”,其中格式为“文件个数>文件名”
private void createInfoFile()
{
java小程序
File infoFile=new File( "file.ini" );
BufferedWriter br=null;
try
{
//如果文件不存在就创建一个新的的文件
if( !infoFile.exists() )
{
infoFile.createNewFile();
}
br=new BufferedWriter(
new FileWriter(infoFile) );
br.write( count+">"+fileName );
br.newLine();
br.flush();
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
if( br!=null )
{
try
{
br.close();
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
}
}
/*
文件合并类
1.通过枚举获取配置文件对象
2.通过输入流获取文件个数和源文件名称
3.把各个文件对象存放在序列流中
4.把通过序列流合并成一个文件
*/
class FileMerge
{
File fileDir; //配置文件目录
FileMerge( String s )
{
this.fileDir=new File( s );
}
public void startMerge()
{
//获取配置文件对象
File f=getFile( fileDir );
//获取文件的配置信息
String fileInfo=getFileInfo( f );
//获取文件的个数
int count=getFileCount( fileInfo );
//获取分割前的文件名
String fileName=getFileName( fileInfo );
//获取枚举集合
Vector<FileInputStream> v=getAllFile( count );
//如果集合不为空就合并文件
if( v!=null )
{
merge( v,fileName );
}
}
//获取配置文件对象
private File getFile( File fileDir )
{
File fileList[]=fileDir.listFiles();
for( int i=0; i<fileList.le
ngth; i++ )
{
if( fileList[i].getName().equals("file.ini"))
{
return fileList[i];
}
}
return null;
}
//
java小程序
获取文件的配置信息
private String getFileInfo( File f )
{
BufferedReader br=null;
String s=null;
try
{
//读取配置信息
br=new BufferedReader( new FileReader( f ) );
s=br.readLine();
}
catch( IOException e )
{
System.out.println( "读取配置文件失败" );
e.printStackTrace();
}
finally
{
//关闭输入流
if( br!=null )
{
try
{
br.close();
}
catch( IOException e )
{
e.printStackTrace();
}
}
}
return s;
}
//获取文件的个数
private int getFileCount( String fileInfo )
{
String num=null;
if( fileInfo!=null )
{
num=fileInfo.substring( 0,fileInfo.indexOf(''>'') );
}
return Integer.parseInt(num) ;
}
//获取分割前的文件名
private String getFileName( String fileInfo )
{
String fileName=null;
if( fileInfo!=null )
{
fileName=fileInfo.substring( fileInfo.indexOf(''>'')+1 );
}
return fileName;
}
//获取枚举集合
private Vector<FileInputStream> getAllFile( int count )
{
Vector<FileInputStream> v=new Vector<FileInputStream>();
for( int i=0; i<count; i++ )
{
File f=null;
try
{
f=new File( fileDir, i+".haha" );
if( !f.exists() )
{
System.out.println( i+".haha文件不存在,合并失败" );
return null;
}
v.add(
new FileInputStream( f ));
}
catch( IOException e )
{
e.printStackTrace();
}
}
return v;
}
//用序列流合并文件
java小程序
//V为枚举接口,count为文件数
private void merge( Vector<FileInputStream> v ,String fileName )
{
Enumeration<FileInputStream> e=v.elements();
SequenceInputStream sis=new SequenceInputStream(e);
FileOutputStream fos=null;
byte buf[]=new byte[1024];
try
{
//输出到文件fileName
fos=new FileOutputStream( fileName );
int num=0;
//读取文件的内容
while( (num=sis.read(buf))!=-1 )
{
fos.write( buf,0,num );
fos.flush();
}
}
catch( IOException e1 )
{
e1.printStackTrace();
}
finally
{
//关闭流
try
{
sis.close();
fos.close();
}
catch( IOException e1 )
{
e1.printStackTrace();
}
}
}
}
class Demo
{
public static void main(String arsg[]
)
{
//分割文件
new FileSplit( "1.bmp" ).split();
//合并文件
new FileMerge( "e://test" ).startMerge();
}
}
正在阅读:
JAVA简单图片分割器05-11
广州市劳动和社会保障局关于申报2008年度广州市社会保险定点医、12-13
气门摇臂轴支座零件机械加工工艺规程及Φ26和28铣前端面夹具设计06-30
挑车技巧06-13
我的世界和风MOD食物合成表09-03
2022关于公司团建活动策划方案范文03-25
药品生产许可证企业申报系统使用说明05-17
一场0分的考试作文600字07-13
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 分割器
- 简单
- 图片
- JAVA
- IT设备盘点登记表
- 团队建设与创新参考答案,必保40分
- 财政绩效管理是提高政府执行力的重要举措
- 浅述城市环境空气质量监测的工作
- 初中英语课堂如何有效的培养学生的口语能力
- 江苏省南通等五市2013届高三5月第三次调研测试地理试题 Word版含答案
- 体外胰岛素抵抗细胞模型的建立及在药物筛选中的应用
- 《房屋建筑学》课程设计
- 【部编】部编版2021-2021学年九年级上册历史第五单元第14课文艺复兴运动同步练习
- 护理知识竞赛试题
- 物权法案例分析、论述及答案
- 矿用连接软管最大直径
- 电动车维修技巧第四章 直流无刷电动机控制器
- 广东省惠州市2015届高三第二次调研考试 数学文 Word版含答案
- 第五章 汽车内饰的清洁护理
- 行星齿轮减速器可靠性优化设计毕业论文开题报告
- 浅谈项目教学法在计算机网络课程中的应用
- 西安交大网络学院护理专业开题报告
- 广东省2010-2013高考文科数学试题
- 农村人民公社工作条例修正草案(人民公社六十条)