`

24、IO包中的打印流,合并流

阅读更多

一、PrintWriter字符打印流

 

    与PrintStream非常类似

 

package day13;

import java.io.*;

public class PrintWriterDemo {

	public static void main(String[] args) throws IOException {
		BufferedReader br = 
				new BufferedReader(new InputStreamReader(System.in));
		PrintWriter pw = new PrintWriter(new FileWriter("E:/in.txt"));
		String line = null;
		while((line=br.readLine())!=null)
		{
			if(line.equals("over"))
				break;
			pw.println(line.toUpperCase());
		}
		pw.close();
		br.close();
	}
}

 

二、SequenceInputStream合并流

 

  1. SequenceInputStream 表示其他输入流的逻辑串联。
  2. 它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,
  3. 接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 

 

public class SequenceInputStream extends InputStream
{
	//通过记住这两个参数来初始化新创建的 SequenceInputStream(将按顺序读取这两个参数,先读取 s1,然后读取 s2),
	//以提供从此 SequenceInputStream 读取的字节
	public SequenceInputStream(InputStream s1,
                           InputStream s2){}

	//通过记住参数来初始化新创建的 SequenceInputStream,该参数必须是生成运行时类型为 InputStream 对象的 Enumeration 型参数。
	//将按顺序读取由该枚举生成的输入流,以提供从此 SequenceInputStream 读取的字节。
	//在用尽枚举中的每个输入流之后,将通过调用该流的 close 方法将其关闭。
	public SequenceInputStream(Enumeration<? extends InputStream> e){}
}

 

三、示例

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.Enumeration;
import java.util.Vector;

/**
 * 需求:合并多个文件为一个文件
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		//用Vector存储多个InputStream对象
		Vector<FileInputStream> v = new Vector<FileInputStream>();
		v.add(new FileInputStream("e:/1.mp3"));
		v.add(new FileInputStream("e:/2.mp3"));
		v.add(new FileInputStream("e:/3.mp3"));
		
		//得到Enumeration
		Enumeration<FileInputStream> e = v.elements();
		
		SequenceInputStream sis = new SequenceInputStream(e);
		FileOutputStream fos = new FileOutputStream("e:/4.mp3");
		
		byte[] buf = new byte[1024];
		int num = 0;
		while((num=sis.read(buf))!=-1)
		{
			fos.write(buf,0,num);
		}
		fos.close();
		sis.close();
		System.out.println("合并成功");
	}
}

 

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

/**
 * 需求:合并多个文件为一个文件
 * 
 * 分析:用ArrayList代替Vector更高效,但是要得到Enumeration就必须转换
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		//用Vector存储多个InputStream对象
		ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();
		al.add(new FileInputStream("e:/1.mp3"));
		al.add(new FileInputStream("e:/2.mp3"));
		al.add(new FileInputStream("e:/3.mp3"));
		
		//得到Enumeration
		final Iterator<FileInputStream> it = al.iterator();
		Enumeration<FileInputStream> e = new Enumeration<FileInputStream>(){
			public boolean hasMoreElements()
			{
				return it.hasNext();
			}
			public FileInputStream nextElement()
			{
				return it.next();
			}
		};
		SequenceInputStream sis = new SequenceInputStream(e);
		FileOutputStream fos = new FileOutputStream("e:/4.mp3");
		
		byte[] buf = new byte[1024];
		int num = 0;
		while((num=sis.read(buf))!=-1)
		{
			fos.write(buf,0,num);
		}
		fos.close();
		sis.close();
		System.out.println("合并成功");
	}
}

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 需求:切割文件
 */
public class SequnceInputStreamDemo {

	public static void main(String[] args) throws IOException {
		FileInputStream fis = new FileInputStream("e:/4.mp3");
		FileOutputStream fos;
		
		byte[] buf = new byte[1024*1024*5];
		int num = 0;
		int x = 5;
		while((num=fis.read(buf))!=-1)
		{
			fos = new FileOutputStream("e:/"+(x++)+".mp3");
			fos.write(buf,0,num);
			fos.close();
		}
		fis.close();
		System.out.println("切割成功");
	}
}

 

分享到:
评论

相关推荐

    java数据流操作PPT学习教案.pptx

    Java的I/O(Input/Output)类库位于`java.io`包中,提供了超过60个不同的流类。这些类大致可以分为四大抽象类:`InputStream`、`OutputStream`、`Reader`和`Writer`。这些抽象类不能直接实例化,但它们的子类被广泛...

    Go 语言标准库

    Go语言的I/O操作不仅限于简单的读写,还包括了一些高级特性,比如`io.Copy`可以用来复制数据,`io.MultiReader`和`io.MultiWriter`可以合并多个读写操作为一个,提供更加灵活的I/O操作方式。 Go语言标准库中的I/O...

    2021-2022计算机二级等级考试试题及答案No.10902.docx

    18. Java的IO流按传输数据的不同分为字节流和字符流,分别处理字节和字符序列。 19. Excel的工资表整理和分析涉及到单元格合并、数据格式设置、数字格式化以及会计专用格式的应用,这些操作都是在Excel中进行数据...

    apache poi教程

    此外,POI还提供了处理字体(`HSSFFont`)、日期格式(`HSSFDataFormat`)和样式(`HSSFCellStyle`)的对象,以及辅助操作如日期转换(`HSSFDateUtil`)和打印设置(`HSSFPrintSetup`)。 创建一个基本的Excel文件...

    Java中获得路径

    在Java中,路径处理主要由java.io和java.nio.file包中的类来支持。本篇文章将详细探讨Java中如何获取和操作路径。 首先,我们来看`IPrinter.java`可能是一个接口,用于定义打印路径的方法,例如: ```java public ...

    pdf所需插件.zip

    这些操作是通过Java的I/O(Input/Output)包实现的,包括`java.io`和`java.nio`包中的类和接口。在给定的压缩包中,包含的jar包很可能是用于帮助开发者处理PDF文档的后台操作,例如解析PDF内容、合并PDF文件、提取...

    poi最新版本及收集的帮助资料

    还有我们我们经常会用到的合并单元格,在这里我们也有这样的操作,代码如下: sheet.addMergedRegion(new Region(1,(short)1,2,(short)4)); 这里面我们还要介绍一个经常会遇到的问题,就是怎么来冻结一个窗口。...

    2021-2022计算机二级等级考试试题及答案No.2614.docx

    - **Java.io**:包中包含了用于处理输入输出流的各种类和接口。 - **输入输出流**:用于读写数据到文件或网络等外部资源。 #### 15. 二分查找的前提条件 - **题目解析**:题目考察二分查找的应用前提。 - **知识...

    实践

    8. **输入/输出流**:Java的IO流库提供了处理文件读写、网络通信的能力。学习`InputStream`和`OutputStream`及其子类,以及`BufferedReader`、`PrintWriter`等,可以帮助实现数据的输入输出。 9. **反射API**:Java...

    src

    理解Java的基础语法、类、接口、异常处理、IO流、集合框架等是Java开发者的基础。 5. **资源文件管理**:"src/main/resources"通常存放非编译的静态资源,如配置文件、图片、音频等。这些文件会被自动包含到最终的...

    java常用英语

    - **Stream**: 流,Java中用于处理输入输出的数据流。 - **Exception**: 异常,程序执行过程中的非正常情况。 - **IO**: 输入输出,用于描述数据的传输过程。 - **Equal**: 等于,用于比较两个值是否相等。 - **...

    从Java的jar文件中读取数据的方法

    JAR(Java Archive)文件是一种打包机制,它将相关的类文件、图像、音频和其他支持文件合并到一个单一的可执行文件中。这种格式不仅方便分发和管理,还支持压缩、身份验证和版本控制。 要从JAR文件中读取数据,首先...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

Global site tag (gtag.js) - Google Analytics