java基础48 IO流技术(序列流)
本文知识点目录:
1、SequenceInputStream序列流的步骤
2、实例
3、附录(音乐的切割与合并)
1、SequenceInputStream序列流的步骤
1.找到目标文件
2.建立数据输入输出通道
3.建立序列流对象
4.关闭资源
2、实例
package com.dhb.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.Enumeration;
import java.util.Vector; /**
* @author DSHORE / 2018-7-13
*
*/
/*
* SequenceInputStream():序列流
* */
public class Demo21 { public static void main(String[] args) throws IOException {
meger1();//字节流
meger2();//序列流
meger3();//序列流
} //方式3:(序列流)把三个文件合成一个文件
public static void meger3() throws IOException{
//找到目标文件
File file1 = new File("F:\\a.txt");
File file2 = new File("F:\\b.txt");
File file3 = new File("F:\\c.txt");
File file4 = new File("F:\\d.txt");
//建立数据输入输出通道
FileOutputStream fos = new FileOutputStream(file4);
FileInputStream fis1 = new FileInputStream(file1);
FileInputStream fis2 = new FileInputStream(file2);
FileInputStream fis3 = new FileInputStream(file3);
//建立序列流
Vector<FileInputStream> vector = new Vector<FileInputStream>();
vector.add(fis1);
vector.add(fis2);
vector.add(fis3);
Enumeration<FileInputStream> e = vector.elements();
SequenceInputStream sequenceInputStream = new SequenceInputStream(e);
//读取文件
byte[] buf = new byte[];
int length = ;
while((length = sequenceInputStream.read(buf)) != -){
fos.write(buf, , length);
}
//关闭资源
sequenceInputStream.close();
fos.close();
} //方式2:(序列流) 需求:使用SequenceInputStream序列流合并a.txt与b.txt文件的内容
public static void meger2() throws IOException{
//找到目标文件
File file1 = new File("F:\\a.txt");
File file2 = new File("F:\\b.txt");
File file3 = new File("F:\\c.txt");
//建立数据输入输出通道
FileOutputStream fos = new FileOutputStream(file3);
FileInputStream fis = new FileInputStream(file1);
FileInputStream fis1 = new FileInputStream(file2);
//建立我们的序列流对象
SequenceInputStream sis = new SequenceInputStream(fis, fis1);
byte[] buf = new byte[];
int length = ;
while((length = sis.read(buf)) != -){
fos.write(buf, , length);
}
//关闭资源
sis.close();
fos.close();
} //方式1:(字节流) 需求:把a.txt与b.txt文件内容合并.
public static void meger1() throws IOException{
//找到目标文件
File file1=new File("F:\\a.txt");
File file2=new File("F:\\b.txt");
File file3=new File("F:\\c.txt");
//建立数据输入输出通道
FileOutputStream fos=new FileOutputStream(file3);
FileInputStream fis=new FileInputStream(file1);
FileInputStream fis1=new FileInputStream(file2);
//把输入流存储到集合中,然后在从集合中读取
ArrayList<FileInputStream> list=new ArrayList<FileInputStream>();
list.add(fis);
list.add(fis1);
//准备一个数组
byte[] buf=new byte[];
int length=;
for (int i = ; i < list.size(); i++) {
FileInputStream fileInputStream=list.get(i);
while((length=fileInputStream.read(buf))!=-){
fos.write(buf, , length);
}
//关闭资源
fileInputStream.close();
}
fos.close();
}
}
原有文件

运行结果图

附录
package com.dhb.file; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector; /**
* @author DSHORE / 2018-7-16
*
*/
//需求:mp3音乐的切割与合并
public class Demo22 {
public static void main(String[] args) throws IOException {
cutFile();
//mergeFile();
}
//合并mp3
public static void mergeFile() throws IOException{
//找到目标文件
File dir = new File("E:\\MyMusic");
//通过目标文件找到所有mp3,然后把这些mp3添加到vector集合中
Vector<FileInputStream> vector = new Vector<FileInputStream>();
File[] file = dir.listFiles();
for (File file2 : file) {
if(file2.getName().endsWith(".mp3")){//获取以.mp3结尾的文件名
vector.add(new FileInputStream(file2));//添加到vector集合中
}
}
Enumeration<FileInputStream> e = vector.elements();//返回此向量组件的枚举。即把上面集合中的元素给了e对象
SequenceInputStream sis = new SequenceInputStream(e);//建立序列流对象
//建立缓冲数组读取文件
byte[] buf = new byte[];
int length = ;
FileOutputStream fos = new FileOutputStream(new File("MyMusic\\MergeMusic\\合并音乐-忘尘谷.mp3"));//建立输出字节流
while((length = sis.read(buf)) != -){//读
fos.write(buf, , length);//写
}
fos.close();
sis.close();
}
//切割mp3
public static void cutFile() throws IOException{
File file = new File("E:\\Music\\忘尘谷.mp3");
//目标文件夹
File dir = new File("E:\\MyMusic");
//建立数据输入通道
FileInputStream fis = new FileInputStream(file);
//建立缓冲数组
byte[] buf = new byte[*];//1024*1024 = 1MB,即:把该音乐切割成每份1MB的大小
int length = ;
//边读边写
for (int i = ; (length=fis.read(buf)) != -; i++) {//读 (每次读1MB)
FileOutputStream fos = new FileOutputStream(new File(dir,"wcg"+i+".mp3"));//建立数据输出通道
fos.write(buf, , length);//写
fos.close();
}
fis.close();
}
}
运行结果图

|
原创作者:DSHORE 作者主页:http://www.cnblogs.com/dshore123/ 原文出自:https://www.cnblogs.com/dshore123/p/9306363.html 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
|
检测语言 世界语 中文简体 中文繁体 丹麦语 乌克兰语 乌兹别克语 乌尔都语 亚美尼亚语 伊博语 俄语 保加利亚语 信德语 修纳语 僧伽罗语 克罗地亚语 冰岛语 加利西亚语 加泰罗尼亚语 匈牙利语 南非祖鲁语 卡纳达语 卢森堡语 印地语 印尼巽他语 印尼爪哇语 印尼语 古吉拉特语 吉尔吉斯语 哈萨克语 土耳其语 塔吉克语 塞尔维亚语 塞索托语 夏威夷语 威尔士语 孟加拉语 宿务语 尼泊尔语 巴斯克语 布尔语(南非荷兰语) 希伯来语 希腊语 库尔德语 弗里西语 德语 意大利语 意第绪语 拉丁语 拉脱维亚语 挪威语 捷克语 斯洛伐克语 斯洛文尼亚语 斯瓦希里语 旁遮普语 日语 普什图语 格鲁吉亚语 毛利语 法语 波兰语 波斯尼亚语 波斯语 泰卢固语 泰米尔语 泰语 海地克里奥尔语 爱尔兰语 爱沙尼亚语 瑞典语 白俄罗斯语 科萨 科西嘉语 立陶宛语 索马里语 约鲁巴语 缅甸语 罗马尼亚语 老挝语 芬兰语 苏格兰盖尔语 苗语 英语 荷兰语 菲律宾语 萨摩亚语 葡萄牙语 蒙古语 西班牙语 豪萨语 越南语 阿塞拜疆语 阿姆哈拉语 阿尔巴尼亚语 阿拉伯语 韩语 马其顿语 马尔加什语 马拉地语 马拉雅拉姆语 马来语 马耳他语 高棉语 齐切瓦语 |
世界语 中文简体 中文繁体 丹麦语 乌克兰语 乌兹别克语 乌尔都语 亚美尼亚语 伊博语 俄语 保加利亚语 信德语 修纳语 僧伽罗语 克罗地亚语 冰岛语 加利西亚语 加泰罗尼亚语 匈牙利语 南非祖鲁语 卡纳达语 卢森堡语 印地语 印尼巽他语 印尼爪哇语 印尼语 古吉拉特语 吉尔吉斯语 哈萨克语 土耳其语 塔吉克语 塞尔维亚语 塞索托语 夏威夷语 威尔士语 孟加拉语 宿务语 尼泊尔语 巴斯克语 布尔语(南非荷兰语) 希伯来语 希腊语 库尔德语 弗里西语 德语 意大利语 意第绪语 拉丁语 拉脱维亚语 挪威语 捷克语 斯洛伐克语 斯洛文尼亚语 斯瓦希里语 旁遮普语 日语 普什图语 格鲁吉亚语 毛利语 法语 波兰语 波斯尼亚语 波斯语 泰卢固语 泰米尔语 泰语 海地克里奥尔语 爱尔兰语 爱沙尼亚语 瑞典语 白俄罗斯语 科萨 科西嘉语 立陶宛语 索马里语 约鲁巴语 缅甸语 罗马尼亚语 老挝语 芬兰语 苏格兰盖尔语 苗语 英语 荷兰语 菲律宾语 萨摩亚语 葡萄牙语 蒙古语 西班牙语 豪萨语 越南语 阿塞拜疆语 阿姆哈拉语 阿尔巴尼亚语 阿拉伯语 韩语 马其顿语 马尔加什语 马拉地语 马拉雅拉姆语 马来语 马耳他语 高棉语 齐切瓦语 |
java基础48 IO流技术(序列流)的更多相关文章
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- java基础之IO流(一)字节流
java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典 ...
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- java基础篇---I/O技术(三)
接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
第一讲 File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...
- java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理
一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...
- java基础43 IO流技术(输入字节流/缓冲输入字节流)
通过File对象可以读取文件或者文件夹的属性数据,如果要读取文件的内容数据,那么我们就要使用IO技术. 一.输入字节流 输入字节流的体系: -------| InputStream:所有输入字节流的 ...
- java基础53 IO流技术(转换流)
1.转换流 1.输入字节的转换流:InputStreamReader是字节流转为字符流的桥梁,可以把输入字节流转换为输入字符流 2.输出字节流的转换流:OutputStreamWriter是字符 ...
随机推荐
- linux内核分析 第七周 Linux内核如何装载和启动一个可执行程序
一.编译链接的过程和ELF可执行文件格式 vi hello.c gcc -E -o hello.cpp hello.c -m32 //预处理.c文件,预处理包括把include的文件包含进来以及宏替换 ...
- yum报错Segmentation fault
yum install 安装一个包,提示 Segmentation fault,可以确定的是这个源肯定是可用的. 经查询,是 libz 这个库存在多个版本,导致冲突. # ldconfig -v | ...
- ImageView的android:scaleType各属性含义(zz)
android:scaleType是控制图片如何resized/moved来匹对ImageView的size.ImageView.ScaleType / android:scaleType值的意义区别 ...
- Git-balabala
想必大家都听说过且用过Github(没听说过-.-),我也一直用Github管理我的代码到现在,如果你只是将其作为自己私有的代码仓库,那么平时用得最多的就是git clone, git add以及gi ...
- vim文件头部注释配置
http://note.youdao.com/noteshare?id=26dff538fabf3e8a0c4e85815256d5bb
- django中的认证与登录
认证登录 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1 authenticate(**credentials) 提供了用户认证,即验证用户名以及密码是否 ...
- python【数据类型:列表与元组】
python列表: 定义一个列表:cities=['北京','上海','广州','深圳'] 注意:列表的下标0表示第一个元素,下标-1表示最后一个元素 列表增加元素 在列表末尾添加一个元素:citie ...
- Git5:Git操作远程仓库
目录 说明 一.git clone 二.git remote 三.git fetch 四.git pull 五.git push 说明 Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个 ...
- Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)
Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...
- 快速搭建Spring Boot项目
Spring boot是Spring推出的一个轻量化web框架,主要解决了Spring对于小型项目饱受诟病的配置和开发速度问题. Spring Boot 包含的特性如下: 创建可以独立运行的 Spri ...