一.转换流
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class OutputStreamWriterDemo {
public static void main(String[] args)throws Exception{
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"test4.txt");
Writer writer=new OutputStreamWriter(new FileOutputStream(f));
writer.write("java OutputStreamWriter test");
writer.close();
}
}
将字节流变成字节流读取文件,代码如下:
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class InputStreamReaderDemo {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"test4.txt");
Reader reader=new InputStreamReader(new FileInputStream(f));
char[] c=new char[1024];
int len=reader.read(c);
reader.close();
System.out.println("内容为:"+new String(c,0,len));
}
}
二.内存操作流
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class ByteArrayInputStreamDemo {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
String str="HELLO WORLD";
ByteArrayInputStream bis=new ByteArrayInputStream(str.getBytes());
ByteArrayOutputStream bos=new ByteArrayOutputStream();
int temp=0;
while((temp=bis.read())!=-1) {
char c=(char)temp;
bos.write(Character.toLowerCase(c));
}
String newstr=bos.toString();
try {
bis.close();
bos.close();
}catch(Exception e) {
e.printStackTrace();
}
System.out.println(newstr);
}
}
这些操作全是在内存中完成的。这个内存操作流一般在生成一些临时信息的时候使用,放在文件里的话,待会程序结束还得删除这个临时文件,比较麻烦.。
三.管道流
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
class Send implements Runnable{
private PipedOutputStream pos=null;
public Send() {
pos=new PipedOutputStream();
}
public PipedOutputStream getPos() {
return pos;
}
public void setPos(PipedOutputStream pos) {
this.pos = pos;
}
@Override
public void run() {
// TODO Auto-generated method stub
String str="java io test";
try {
this.pos.write(str.getBytes());
}catch(Exception e) {
e.printStackTrace();
}
try {
pos.close();
}catch(Exception e) {
e.printStackTrace();
}
}
}
class Receive implements Runnable{
private PipedInputStream pis=null;
public Receive() {
pis=new PipedInputStream();
}
public PipedInputStream getPis() {
return pis;
}
public void setPis(PipedInputStream pis) {
this.pis = pis;
}
@Override
public void run() {
// TODO Auto-generated method stub
byte[] b=new byte[1024];
int len=0;
try {
len=this.pis.read(b);
}catch(Exception e) {
e.printStackTrace();
}
try {
pis.close();
}catch(Exception e) {
e.printStackTrace();
}
System.out.println(new String(b,0,len));
}
}
public class PipedDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Send s=new Send();
Receive r=new Receive();
try {
s.getPos().connect(r.getPis());
}catch(Exception e) {
e.printStackTrace();
}
new Thread(s).start();
new Thread(r).start();
}
}
测试代码有点长,但是很简单,使用PipedOutStream类中提供的connect()方法连接两个管道流。线程启动后自动进行管道的输入输出操作。
四.打印流
打印流是整个IO包中输出信息最方便的类,有字节打印流(PrintStream)和字符打印流(PrintWrter)。打印流可以打印任何数据类型,我们主要介绍字节打印流。1、public PrintStream(File file) throws FileNotFoundException 构造方法 通过一个File对象实例化PrintStream类
2、public PrintStream(OutputStream out) 构造方法 接收OutputStream对象,实例化PrintStream类
3、public PrintStream printf(Locale l, String format, Object ...arg) 普通方法 根据指定的Locale进行格式化输出
4、public PrintStream printf(String format,Object ... arg) 普通方法 根据本地环境进行格式化输出
5、public void print(boolean b) 普通方法 此方法被重载很多次,输出任意数据
6、public void println(boolean b) 普通方法 此方法被重载很多次,输出任意数据后换行
第二个构造方法可以直接接收一个OutputStream对象,这个是因为PrintStream比OutputStream输出更方便,好比把OutputStream包装一下,使之输出更方便。就是打印流把输出流包装了一下,这种设计叫做装饰设计模式。
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamDemo {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"word.txt");
PrintStream ps=new PrintStream(new FileOutputStream(f));
ps.println("java io test");
ps.println(2+2);
ps.close();
}
}
是不是发现方便很多,PrintStream还可以格式化输出,%s->变成字符串;%d->变成整数;%f->变成小数;%c->变成字符,使用printf()完成操作
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class PrintStreamDemo2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"word.txt");
PrintStream ps=new PrintStream(new FileOutputStream(f));
String name="阿里巴巴";
int age=20;
float grade=88.364f;
char sex='男';
ps.printf("%s;%d;%f;%c",name,age,grade,sex);
ps.close();
}
}
四.System对IO的支持
setOut(PrintStream out) 重新分配“标准”输出流
为System.out输出重定向:
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class SystemDemo {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
File f=new File("d:"+File.separator+"word1.txt");
FileOutputStream fileops=new FileOutputStream(f);
PrintStream ps=new PrintStream(fileops);
System.setOut(ps);
System.out.println("java io test");
}
}
其他两个操作都大同小异,我就不一一介绍了。
未完待续.....