IO字节输入输出流
OutputStream:字节输出流
该抽象类是所有字节输出流的超类;
定义了一些共性的成员方法:
1.写入一个字节
void write(int b);//b表示字节
2.写入字节数组
void write(byte[] b);//写入一个字节数组
3.写入字节数组的一部分
void write(byte[] b,int off, int len);//off 表示起始索引,len表示写几个
4.刷新输出流,并强制写出所有缓冲的输出字节
void flush();
5.关闭输出流并释放与之有关的所有系统资源
void close();
FileOutputStream :文件字节输出流 extends OutputStream
作用:
把内存中的字节数据,写入到文件中保存
构造方法:
1.创建一个指向File对象表示的文件中写入数据的文件输出流
FileOutputStream(File file);
2.创建一个指定名称的文件中写入数据的输出文件流
FileOutputStream(String name);//通俗说就是个文件路径名
构造方法的作用(也就是他干什么事)
1.会根据构造方法的参数,创建一个文件,如果没有设置追加写的值,文件已经存在的话,就会覆盖
2.创建一个FileOutputStream对象
3.将这个对象指向目的地
IO读写的过程:
java程序--->JVM--->OS(操作系统)--->调用方法进行读写文件
FileOutputStream的使用步骤:
1.创建对象,在构造方法中绑定写入数据的目的地 2.调用对象中的方法write,把数据写入到文件中 3.释放资源
注意:
字节流操作的是字节,所以会直接把字节写入到文件中;
字符流操作的是字符,先会将字符写到内存的缓冲区中,进行转换,转换为字节,再使用底层的字节流将数据写入到文件中
字符输出流使用实例1
1 FileOutputStream fos= new FileOutputStream("a.txt");//a.txt相对路径,相对项目目录下 2 fos.write(97);//写入一个字节 3 fos.close();//关闭流并释放资源
使用实例2:
FileOutputStream fos= new FileOutputStream(new File('a.txt'));//构造方法中传递一个File文件对象 byte[] b="你好".getBytes();//使用String类方法将字符串转换成字节数组 fos.write(b);//写入一个字节数组 fos.close();//关闭资源
追加写与换行
1.追加写:boolean append 参数追加写开关,true是追加,false是不追加,默认是false
FileOutputStream(File file, boolean append); FileOutputStream(String pathname,boolean append);
2.换行
win系统:
linux:/n
mac:
可以使用System类的静态方法动态获取换行符
System.getProperty("line.separator");
InputStream:字节输入流,该抽象类是所有字节输入流的超类
共性的成员方法:
1.读取一个字节并返回,没有字节返回-1
int read();
2.读取一定量的字节数,并存储到字节数组中,返回读取到的字节数
int read(byte[] b);
3.关闭输入流并释放与之有关的所有系统资源
void close();
FileInputStream:文件字节输入流 java.lang.FileInputStream extends InputStream
作用:将文件中的数据,以字节的形式读取到内存中
构造方法:
FileInputStream(File file);//数据源使用File对象 FileInputStream(String pathname);//数据源是一个文件路径
构造方法的作用:
1.创建一个字节输入流的对象
2.会将这个对象指向构造方法中要读取的数据源
FileInputStream使用步骤:
1.创建对象,绑定构造方法中的数据源 2.调用字节输入流的方法read,来读取文件 3.释放资源
FileInputStream读取单字节实例:
1 //创建对象,绑定源文件 2 FileInputStream fis= new FileInputStream("a.txt");//a.txt是存在的 3 //读取单字节。 4 int len=0; 5 while((len=fis.read())!=-1){ 6 System.out.println((char)len);//这里的输出就只能是单字节字符,不能是中文,因为一个中文2个字节,读一个字节就输出会乱码; 7 } 8 //关闭流资源 9 fis.close();
FileInputStream读取字节数组实例:
//创建输入流对象 FileInputStream fis=new FileInputStream(new File("a.txt")); //创建要接收字节的数组 byte[] b= new byte[1024];//这里一般是1024或者其整数倍 int len =0;//这里的len是每次读取的有效个数 while((len= fis.read(b))!=-1){ System.out.println(new String(b,0,len));//这里使用String类的构造方法,b是字节数组,0是开始索引,len是个数 } /* 注意: 1.字节数组的作用:起到缓冲的作用,一次读取多个字节存在数组中,提高效率,这个字节数组的长度一般定义为1024或者是1024的倍数 2返回值int是什么:每次读取的有效字节个数 */