字节输入流家族的
基类inputStream-->fileInputStream-->BufferedInputStream
字节流读取数据的的方式:
1.一次读取一个字节
package cn.itcast.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class FileInputStreamDemo4 {
public static void main(String[] args) throws Exception {
InputStream in=new FileInputStream("fos.txt");
// int by = in.read();
// System.out.print((char)by);
// int by2 = in.read();
// System.out.print((char)by2);
//使用循环改进
int by=0;
while((by=in.read())!=-1){
System.out.print((char)by);
}
}
}
2.一次读取一个字节数组
package cn.itcast.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class FileInputStreamDemo1 {
public static void main(String[] args) throws Exception {
InputStream in=new FileInputStream("fos.txt");
byte by[]=new byte[1024];
int len=0;//这里代表读取到的字节数
while((len=in.read(by))!=-1){
System.out.println(new String(by,0,len));//默认是gbk的解码,为了防止最后读取的个数不够一个字节数组因此我们使用new String(byte[],0,len)
}
in.close();
}
}
3.使用高级流字节缓冲流进行包装(也可以包括一次读取一个字节,一次读取一个字节数组)
package cn.itcast.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class BufferedDemo2 {
public static void main(String[] args) throws Exception {
//封装数据源
BufferedInputStream in=new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("b.txt"));
//使用一次读取一个数组的方式读取
byte by[]=new byte[1024];
int len=0;
while((len=in.read(by))!=-1){
out.write(by, 0, len);
}
out.close();
in.close();
}
}
字节输出流家族 outputStream-->fileInputStream-->bufferedInputStream
1.创建字节输出流的时候都做了些什么,以及关闭流的时候都做了什么?
package cn.itcast.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class FileOutputStreamDemo {
public static void main(String[] args) throws Exception {
OutputStream out=new FileOutputStream("fos.txt");
//创建字节输出流的时候做了什么?
/*
* 创建字节输出流对象了做了几件事情:
* A:调用系统功能去创建文件
* B:创建fos对象
* C:把fos对象指向这个文件
*/
out.write("中国".getBytes());
out.close();
/*
* 为什么一定要close()呢?
* A:让流对象变成垃圾,这样就可以被垃圾回收器回收了
* B:通知系统去释放跟该文件相关的资源
*/
}
}
2.引出字符流 在字节流读取中文或者写中文的时候有时候出出现问题,或者出现字符流是针对文本文件(只要使用记事本打开我们可以看懂的就是文本文件,比如.java文件等,图像音频不是文本文件只能使用字节流)inputStreamReader
outPutStreamWriter(这两个类就是装饰类)
package cn.itcast.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class BufferedDemo2 {
public static void main(String[] args) throws Exception {
//封装数据源
BufferedInputStream in=new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("b.txt"));
//使用一次读取一个数组的方式读取
byte by[]=new byte[1024];
int len=0;
while((len=in.read(by))!=-1){
out.write(by, 0, len);
}
out.close();
in.close();
}
}