定义:IO流是用来处理设备之间的数据传输 的。JAVA中对数据的操作都是通过流的方式,而用于操作流的对象都在IO包中。
分类:按照数据流向,分为输入流和输出流。输入流用来读入数据,输出流用来写入数据
按照数据类型分为字节流和字符流,其中字节流可以用来读写所有类型的文件,比如音频,视频,文本文件等。但是字符 流只能用来读写文本文件。但一般我们优先使用字节流。
使用限定:如果数据所在文件通过windows自带的记事本打开能读懂里边的内容,就用字符流,其他都用字节流。
IO流中的抽象基类:
字节流:InputStream,OutputStream
字符流:Reader,Writer
由这四个类派生出的子类名称都是以其父类名作为子类名的后缀。
FileOutputStream
构造方法:FileOutputStream(File file) 参数是一个文件,创建一个指定File对象表示的文件中写入数据的文 件输出流
FileOutputStream(String name)参数是一个字符串。创建一个向具有指定名称的文件中写入数据 的输出文件流
FileOutputStream(File file,boolean append):第二个参数表示是否要追加写入,比如要给已经有数据的文件中增加 数据,就把第二个参数设定为true。
FileOutputStream(String name):同上,只不过是关联文件的时候是通过文件名而不是文件。
当我们在创建文件输出流时,关联文件时如果没有这个文件,此流回自动为我们创建这个文件
例如:
package FileStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class one{
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream(new File("hello.txt"));
byte []bytes="hello world".getBytes();
fos.write(bytes);
System.out.println("Hello");
//FileOutputStream允许字节数据和int类型的构建
FileOutputStream fos2=new FileOutputStream("a.txt");
fos2.write(98);
fos2.write('a');
fos2.write(100);
System.out.println("a");
fos.close();
fos2.close();
}
}
在创建的过程都做了哪些事:
1、调用系统资源创建a.txt文件
2、创建一个fos对象
3、把fos对象指向这个文件
注意:最后一定要关闭文件(close())
作用:通知系统释放关于管理a.txt 文件的资源;让IO流对象变成垃圾,等待垃圾回收器对其回收。
Write方法(FileOutputStream):
public void write(int b):写一个字节 如果超过一个字节 就砍掉前面的字节
public void write(byte[] b):写一个字节数组
public void write(byte[] b,int off,int len):写一个字节数组的一部分,len为起始位置
需要注意,如果是GBK编码 一个汉字占两个字节,如果是UTF-8编码 一个汉字占3个字节
FileInputStream(文件写入字符流):
常用方法:
int read():一次读取一个字节,如果没有数据就返回-1.
int read(byte []b):一次读取一个字节数组,返回的int类型的值表示读取到的字节的个数,如果没有值了就返回-1
我们首先要认为的创建一个字符缓冲区,用来接收我们读取到的文件。
import java.io.FileInputStream;
import java.io.IOException;
public class MyTest2 {
public static void main(String[] args) throws IOException{
FileInputStream fis = new FileInputStream("a.txt");
//这个字节数组充当就是数据缓冲区
byte[] by=new byte[1024*8];
fis.read(by);//一次读取一个字节数组
for(byte b:by){
System.out.println(b);
}
//释放资源
fis.close();
}
}
BufferedOutputStream:高效的字符输出流,比FileOutputStream更加高效。
自己包含一个缓冲区。