IO流

IO的操作步骤

FileInputStream 字节输入流

File file=new File("a.txt"); 文件

//使用流和具体的文件关联

InputStream is= new FileInputStream(file);

int c;

//将读取到的内容临时存入c,判断是否读到文件末尾,-1

while((c=is.read())!=-1){

System.out.println(c);

} 
//关闭流

is.close();



File file=new File("b.txt");

//流

InputStream is=new FileInputStream(file);

//定义一个存储数据的临时空间

byte[] bs=new byte[1024];

//将读取的内容存入临时空间,返回读取到的字节数

int len;

while((len=is.read(bs))!=-1){

System.out.println(new String(bs,0,len,"UTF-8"));

}

is.close();

Reader字符输入流

File file=new File("b.txt");

Reader r=null;

r=new FileReader(file);

char[] c=new char[3];

//接收读取到的字符个数

int len;

while((len=r.read(c))!=-1){

System.out.println(new String(c,0,len));

}

r.close();

OutputStream 字节输出流

//1、文件

File file=new File("a.txt");

//2、流

FileOutputStream os=new FileOutputStream(file);

byte[] bs=newbyte[]{97,98,99};

bs="你我他".getBytes("GBK");//GBK编码


//写出

for(int i=0;i<2;i++){

os.write(bs);

os.flush();//输出流要刷新缓存

}

//刷新

os.close();

Writer字符输出流

File file=new File("e1.txt");

Writer w=new FileWriter(file,true);

//(file代表要输出的文件,append表示是否在原文件的后面追加)

String str=new String("你".getBytes("GBK"));

System.out.println(str);

w.write(str);

w.flush();

w.close();

文件的复制 字符流边读边写

File src=new File("test.png");

//目的地

File dest=new File("testcopy.png");

Reader r=new FileReader(src);

Writer w=new FileWriter(dest);

char[]car=newchar[1024];

int len;

//循环读取

while((len=r.read(car))!=-1){

w.write(car,0,len);

}

w.flush();

w.close();//先开启的流后关闭

r.close();

字符流 边写边读

File src=new File("test.png");

//目的地

File dest=new File("testcopy.png");

InputStream is=new FileInputStream(src);

OutputStream os=new FileOutputStream(dest);

byte[]car=newbyte[2];

int len;

while((len=is.read(car))!=-1){

os.write(car,0,len);

}

os.flush();

os.close();

is.close();

缓冲流 BufferInputStream 以及 BufferOutputStream

提高性能读取文件 +新增的方法(不能使用多态)

InputStream is=new FileInputStream("a.txt");

//处理流套在结点流之上

BufferedInputStream bis=new BufferedInputStream(is);

byte [] bytes=new byte[1024];

int len;

while((len=bis.read(bytes))!=-1){

System.out.println(newString(bytes,0,len,"utf-8"));

}

//内部会帮我们关闭其他流

bis.close();



BufferedReader br=new BufferedReader(new FileReader("a.txt"));

String data;

while(null!=(data=br.readLine())){

System.out.println(data);

}

br.close(); 



BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("f.txt"));

bos.write("核力量".getBytes());

bos.flush();

bos.close();

File file=new File("g.txt");

Writer w=new FileWriter(file);

//流准备好了

BufferedWriter bw=new BufferedWriter(w);

//写数据

bw.write("hellWorld你好世界");

bw.newLine();

bw.write("世界你好");

//刷新

bw.flush();

//释放资源

bw.close();

转换处理流

InputStreamReader

字节流输入 字符流输出

//解决乱码而且方便

//通过字节流读取文件内容,由转换流内部帮我们将字节转为字符,而且我们设置了编码

InputStreamReader isr=new InputStreamReader(new FileInputStream("a.txt"),"GBK");

BufferedReader bufferedReader=new BufferedReader(isr);

String str1;

while((str1=bufferedReader.readLine())!=null){

System.out.println(str1);

}

bufferedReader.close();

数据处理流

DataInputStream DataOutputStream

其他文件是以String类型的数据 但数据处理流可以用来处理 其他类型的数据 例如int ,double等基本类型的数据

OutputStream os=new FileOutputStream("a.txt");

DataOutputStream dos=new DataOutputStream(os);

dos.writeInt(1111);

dos.flush();

dos.close();

DataInputStreamd is=new DataInputStream(new FileInputStream("a.txt"));

int i=dis.readInt();

System.out.println(i);

dis.close(); 

对象流

使用对象流时,类一定要序列化。如果希望某些属性不被序列化,可在属性里加入关键字 transient

//序列化

OutputStream os=new FileOutputStream("a.txt");

//处理流对象流

ObjectOutputStream oos=new ObjectOutputStream(os);

//写出对象

oos.writeObject(newPerson("zs",18,true));

oos.flush();

oos.close();



//反序列化

ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt"));

Person p=(Person)ois.readObject();

System.out.println(p);

ois.close();

ByteArrayInputStream与ByteArrayOutputStream

byte[] bytes="abcdefghijklmnopqrstuvwxyz".getBytes();

StringBuilder sb=new StringBuilder();

//字节数组输入流

ByteArrayInputStream bais=new ByteArrayInputStream(bytes);

int temp;

while((temp=bais.read())!=-1){

sb.append((char)temp);

}

System.out.println(sb);