PrintStream将各种数据类型的数据原样打印。
PrintStream
字节打印流
构造函数可以接收的参数类型
1.File对象 :File
2.字符串路径:String
3.字节输出流:FileOutputStream
PrintWriter
字符打印流
构造函数可以接收的参数类型
1.File对象 :File
2.字符串路径:String
3.字节输出流:FileOutputStream
4.字符输出流:Writer
PrintWriter实例:将键盘输入输出到指定文件
/*
PrintStream将各种数据类型的数据原样打印。
PrintStream
字节打印流
构造函数可以接收的参数类型
1.File对象 :File
2.字符串路径:String
3.字节输出流:FileOutputStream
PrintWriter
字符打印流
构造函数可以接收的参数类型
1.File对象 :File
2.字符串路径:String
3.字节输出流:FileOutputStream
4.字符输出流:Writer
*/
/*
PrintWriter实例:打印键盘输入
*/
import java.io.*;
import java.util.*;
class PrintWriterDemo
{
public static void main(String[] args) throws IOException
{
BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
//使用PrintWriter指定输出位置
PrintWriter pw=new PrintWriter(new FileWriter("a.txt"),true);
String str=null;
while((str=bufr.readLine())!=null){
pw.println(str);
}
//关闭输入
bufr.close();
//关闭输出
pw.close();
}
}
分割文件(SequenceInputStream)
思路:
1.SequenceInputStream可将多个文件合并输出,其接收的参数为Enumeration,Vector类可返回Enumeration
2.将要合并的文件存储到Vector(只接收FileInputStream),并使用elements方法枚举
3.将得到的Enumeration传递给SequenceInputStream,并读取。
4.将读取到的数据存储到指定的文本文件
/*
SequenceInputStream实例:将多个文件的内容合并到一个文件
*/
/*
SequenceInputStream(Enumeration<? extends InputStream> e)
通过记住参数来初始化新创建的 SequenceInputStream,
该参数必须是生成运行时类型为 InputStream 对象的Enumeration 型参数。
Vector
Enumeration<E> elements()
返回此向量的组件的枚举。
*/
import java.io.*;
import java.util.*;
class SequenceDemo
{
public static void main(String[] args) throws IOException
{
//SequenceInputStream的参数中需要使用Enumeration
//Enumeration在Vector中。
Vector<FileInputStream> v=new Vector<FileInputStream>();
v.add(new FileInputStream("h:\\javabase\\day20\\1.txt"));
v.add(new FileInputStream("h:\\javabase\\day20\\2.txt"));
v.add(new FileInputStream("h:\\javabase\\day20\\3.txt"));
//列出Vector中的所有枚举
Enumeration<FileInputStream> e=v.elements();
SequenceInputStream sis=new SequenceInputStream(e);
//指定存储的文本文件。
FileOutputStream fos=new FileOutputStream("h:\\javabase\\day20\\4.txt");
int len=0;
byte[] buf=new byte[1024];
String str=null;
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
sis.close();
fos.close();
}
}
合并文件
思路:
1.将碎片文件存储到集合容器中
2.将存储碎片的集合容器转化为Enumeration
3.将转化好的Enumeration作为参数传递给SequenceInputStream
4.依次循环读取SequenceInputStream中的数据并写入合并的文件
5.关闭资源
/*
合并文件
*/
import java.io.*;
import java.util.*;
class mergeDemo
{
public static void main(String[] args) throws IOException
{
System.out.println("Hello World!");
merge();
}
public static void merge()throws IOException{
//构建集合,存储分割好的文件
ArrayList<FileInputStream> arr=new ArrayList<FileInputStream>();
for(int x=1;x<4;x++){
arr.add(new FileInputStream("H:\\javabase\\day20\\"+x+".part"));
}
//使用迭代器构建枚举。
final Iterator<FileInputStream> ite=arr.iterator();
Enumeration<FileInputStream> en=new Enumeration<FileInputStream>(){
public boolean hasMoreElements(){
return ite.hasNext();
}
public FileInputStream nextElement(){
return ite.next();
}
};
//将得到的枚举传入SequenceInputStream参数中
SequenceInputStream sis=new SequenceInputStream(en);
//输出指定的文件
FileOutputStream fos=new FileOutputStream("h:\\javabase\\day20\\123.bmp");
int len=0;
byte[] buf=new byte[1024];
while((len=sis.read(buf))!=-1){
fos.write(buf,0,len);
}
fos.close();
sis.close();
}
}