打印流:
该流提供了打印方法,可以将各种数据类型的数据都原样打印
PrintStream(字节打印流)
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
PrintWrite(字符打印流)
构造函数可以接收的参数类型:
1,file对象。File
2,字符串路径。String
3,字节输出流。OutputStream
4,字符输出流,Writer
例:
import java.io.*;
class PrintStreamDemo
{
public static void main(String[] args)throws IOException
{
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));//默认从键盘输入
PrintWriter out = new PrintWriter(new FileWriter("a.txt"), true);//自动刷新,改变默认输出
String line = null;
while((line=bufr.readLine()) != null)
{
if("over".equals(line))
break;
out.println(line.toUpperCase());//大写形式输出到指定文件
//out.flush();
}
out.close();//关闭流
bufr.close();
}
}
-----------------------------------------------------------------------------
SequenceInputStream表示其他输入流的逻辑串联,它从输
入流的有序集合开始,并从第一个输入流开始读取,直到
文件末尾,接着从第二个输入流对象读取,以此类推,直到
到达包含的最后一个输入流的文件末尾为止。
合并流,代码:
import java.io.*;
import java.util.*;
class SequenceDemo
{
public static void main(String[] args)throws IOException
{
Vector<FileInputStream> v = new Vector<FileInputStream>();//创建集合对象,并作泛型限定
v.add(new FileInputStream("c:\\1.txt"));//添加元素
v.add(new FileInputStream("c:\\3.txt"));
v.add(new FileInputStream("c:\\2.txt"));
Enumeration<FileInputStream> en = v.elements();
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("c:\\4.txt");//输出地
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf)) != -1)
{
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
}
-------------------------------------------------------------------------------------------------------------------------
/*
切割流对象并合并
*/
import java.io.*;
import java.util.*;
class SplitFile
{
public static void main(String[] args)throws IOException
{
//splitFile();
merge();
}
public static void merge()throws IOException //合并流对象
{
ArrayList<FileInputStream> a1 = new ArrayList<FileInputStream>();//集合对象,泛型限定
for(int x=1; x<=3; x++)
{
a1.add(new FileInputStream("c:\\splitfile\\"+x+".part")); //添加元素
}
final Iterator<FileInputStream> it = a1.iterator();//迭代器
Enumeration<FileInputStream> en = new Enumeration<FileInputStream>()
{
//枚举
public boolean hasMoreElements()
{
return it.hasNext();
}
public FileInputStream nextElement()
{
return it.next();
}
};
SequenceInputStream sis = new SequenceInputStream(en);
FileOutputStream fos = new FileOutputStream("c:\\splitfile\\0.JPG");
byte[] buf = new byte[1024];
int len = 0;
while((len=sis.read(buf)) != -1)
{
fos.write(buf, 0, len); //写入
}
fos.close();
sis.close();
}
public static void splitFile()throws IOException //切割流对象
{
FileInputStream fis = new FileInputStream("c:\\138.JPG");//关联文件
FileOutputStream fos = null;
byte[] buf = new byte[1024*1014];//每次刚好1M
int len = 0;
int count = 1;
while((len=fis.read(buf)) != -1)
{
fos = new FileOutputStream("c:\\splitfile\\"+(count++)+".JPG"); //创建对象
fos.write(buf, 0, len);//写入
fos.close();//读一次关闭一次流
}
fis.close();
}
}
-----------------------------------------------------------------------------------------------------
个人总结:注意PrintStream和PrintWrite的区别,分别是字节打印流和字符打印流,可以
改变默认输出方式,序列流SequenceInputStream可以用于多个文件的合并,需要和集合
结合使用