Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
读写文件
一个流被定义为数据序列,输入流用于从源文件读取数据,输出流用于向目标文件写数据。
IO流分为字节流和字符流。字符流又分为Reader和Writer,字节流分为InPutStream 和OutPutStream。
字节流
FileInputStream
该流用于从文件读取数据,它的对象可以用关键字 new 来创建;有两种构造方法
//构造方法1
InputStream f=new FileInputStream("c:/java/hello");
//构造方法2
File f= new File("C:/java/hello");
InputStream out = new FileInputStream(f);
控制台输入
//BufferedReader 对象创建后,我们便可以使用 read() 方法从控制台读取一个字符,或者用 readLine() //方法读取一个字符串。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。 //该方法抛出 IOException
int read() throws IOException
//读取一个字符串需要使用 BufferedReader 的 readLine() 方法。
String readLine() throws IOException
FileOutputStream
该类用来创建一个文件并向文件中写数据。如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两种构造方法:
//构造方法1
OutputStream f = new FileOutputStream("C:/java/hello")
//构造方法2
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
字符流
字符的处理,一次处理一个字符,字符的底层实现依旧是基本的字节序列。
字符流的基本实现 :
InPutStreamReader :完成byte流解析成 char 流,按照编码解析,
OutPutStreamWriter: 提供char 流 到 byte 流,按编码处理。
String file1="C:\\Users\\acer\\workspace\\encode\\new4\\test1";
String file2="C:\\Users\\acer\\workspace\\encode\\new4\\test2";
InputStreamReader isr=new InputStreamReader(new FileInputStream(file1));
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(file2));
// int c;
// while((c=isr.read())!=-1){
// System.out.print((char)c);
// }
char[] buffer=new char[8*1024];
int c;
//批量读取,放入buffer这个字符数组,从第0个位置到数组长度
//返回的是读到的字符个数
while((c=isr.read(buffer,0,buffer.length))!=-1){
String s=new String(buffer,0,c);//将char类型数组转化为String字符串
System.out.println(s);
osw.write(buffer,0,c);
osw.flush();
//osw.write(s);
//osw.flush();
}
isr.close();
osw.close();
注意 :
字符流操作的是文本文件,不能操作其他类型的文件!!
微信公众号