IO流用来处理设备之间的数据传输
Java对数据的操作是通过流的方式
Java用于操作流的对象都在IO包中
流按照操作数据分为两种:字节流和字符流
流按照流向分为:输入流和输出流
输入流和输出流是相对于内存设备而言;
简单来说,输入流就是将外设中的数据输入到内存中做运算,而输出流就是将内存中的数据写入到外设中。输入部分就是读,输出部分就是写,进行数据的流动。
字节流:输入和输出数据的特点就是全部都是以字节为单位的二进制,用来处理字节的流对象就是字节流;
字符流:字节流读取文字字节数据后,不直接操作而是先查找指定的编码表,获取对应的文字,再对这个文字进行操作,简单而言:字符流就是字节流+编码表
字节流的抽象基类(顶层父类):InputStream OutputStream
字符流抽象基类(顶层父类):Reader Writer
例如:需求:将一些文字存储到硬盘的一个文件中,如果要操作文字数据,建议优先考虑字符流,而且要将数据从内存写到硬盘上,要使用字符流中的输出流Writer
FileWriter:用来写入字符文件的便捷类
//创建一个可以往文件中写入字符数据的字符输出流对象
FileWriter fw = new FileWriter("文件所在位置"); //若文件不存在,则会自动创建;若文件存在则会被覆盖。
//调用Writer对象中的write(string)方法,写入数据,其实是将数据写入到临时存储缓冲区中
fw.write("abcde");
//进行刷新,将数据直接写入到目的地中
fw.flush();
//关闭流,关闭资源。在关闭前会先调用flush刷新缓冲区中的数据到目的地
fw.close();
换行:fw.write("abcde"+LIKE_SEPARATOR+"hhhh");
如果构造函数中加入true,可以实现对文件进行续写:
FileWriter fw = new FileWriter("文件所在位置",true);
fw.write("mmmmm");
fw.write("abcde"+LIKE_SEPARATOR+"hhhh");
运行结果则是:
mmmmmabcde
hhhh
读取一个文本文件,将读取到的字符打印到控制台
需求:读取一个文本文件,将读取到的字符打印到控制台
public static void main (String[] args) throws IOException{
//创建读取字符数据的流对象
//在创建读取流对象时,必须要明确被读取的文件,一定确定该文件是存在的
//用一个读取流关联一个已经存在的文件
FileReader fr = new FileReader("已经存在的文件名");
//用Reader中的read方法读取字符
int ch = fr.read();
System.out.println(ch);
fr.close();
}
public static void main (String[] args) throws IOException{
//创建读取字符数据的流对象
FileReader fr = new FileReader("已经存在的文件名");
//使用read(char[])读取文本文件数据;先创建数据
char[] buf = new char[3];
int num = fr.read(buf);//将读取到的字符存储到数组中
System.out.println(num+":"+new String(buf));
fr.close();
}
缓冲区的出新提高了对数据的读写效率
对应类:
BufferedWriter
BufferedReader
缓冲区要结合流才能被使用
在流的基础上对流的功能进行了增强
package cn.itcast;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
private static final String FileNotFoundException = null;
private static final String IOException = null;
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("");
BufferedReader bufr = new BufferedReader(fr);
String line = null;
while((line=bufr.readLine())!=null){
System.out.print("line");
}
bufr.close();
public static void demo() throws FileNotFoundException, IOException{
FileReader fr1 = new FileReader("");
char[] buf = new char[1024];
int len=0;
while ((len=fr1.read(buf))!=1){
System.out.println(new String(buf,0,len));
}
fr1.close();
}
}
}
基本操作与字符流类相同
但它不仅可以操作字符,还可以操作其它媒体文件
字节流操作文本演示: