字符流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。
所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
java.io.Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
-
public void close():关闭此流并释放与此流相关联的任何系统资源。 -
public int read(): 从输入流读取一个字符。 -
public int read(char[] cbuf)
构造方法
-
-
FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。
public class Demo02Reader { public static void main(String[] args) throws IOException { //1.创建FileReader对象,构造方法中绑定要读取的数据源 FileReader fr = new FileReader("09_IOAndProperties\\c.txt"); //2.使用FileReader对象中的方法read读取文件 //int read(char[] cbuf)一次读取多个字符,将字符读入数组。 char[] cs = new char[1024];//存储读取到的多个字符 int len = 0;//记录的是每次读取的有效字符个数 while((len = fr.read(cs))!=-1){ /* String类的构造方法 String(char[] value) 把字符数组转换为字符串 String(char[] value, int offset, int count) 把字符数组的一部分转换为字符串 offset数组的开始索引 count转换的个数 */ System.out.println(new String(cs,0,len)); } //3.释放资源 fr.close(); } }
public class Demo01Writer { public static void main(String[] args) throws IOException { //1.创建FileWriter对象,构造方法中绑定要写入数据的目的地 FileWriter fw = new FileWriter("09_IOAndProperties\\d.txt"); //2.使用FileWriter中的方法write,把数据写入到内存缓冲区中(字符转换为字节的过程) //void write(int c) 写入单个字符。 fw.write(97); //3.使用FileWriter中的方法flush,把内存缓冲区中的数据,刷新到文件中 //fw.flush(); //4.释放资源(会先把内存缓冲区中的数据刷新到文件中) fw.close(); } }
-
public class Demo03Writer { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("09_IOAndProperties\\f.txt"); char[] cs = {'a','b','c','d','e'}; //void write(char[] cbuf)写入字符数组。 fw.write(cs);//abcde //void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。 fw.write(cs,1,3);//bcd //void write(String str)写入字符串。 fw.write("传智播客");//传智播客 //void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。 fw.write("黑马程序员",2,3);//程序员 fw.close(); } }
续写和换行
/* 续写和换行 续写,追加写:使用两个参数的构造方法 FileWriter(String fileName, boolean append) FileWriter(File file, boolean append) 参数: String fileName,File file:写入数据的目的地 boolean append:续写开关 true:不会创建新的文件覆盖源文件,可以续写; false:创建新的文件覆盖源文件 换行:换行符号 windows:\r\n linux:/n mac:/r */ public class Demo04Writer { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("09_IOAndProperties\\g.txt",true); for (int i = 0; i <10 ; i++) { fw.write("HelloWorld"+i+"\r\n"); } fw.close(); } }
三,字符缓冲流
构造方法
-
public BufferedReader(Reader in):创建一个新的缓冲输入流。 -
public BufferedWriter(Writer out)
public class Demo03BufferedWriter { public static void main(String[] args) throws IOException {//1.创建字符缓冲输出流对象,构造方法中传递字符输出流 BufferedWriter bw = new BufferedWriter(new FileWriter("10_IO\\c.txt")); //2.调用字符缓冲输出流中的方法write,把数据写入到内存缓冲区中 for (int i = 0; i <10 ; i++) { bw.write("传智播客"); //bw.write("\r\n"); bw.newLine(); //换行 } //3.调用字符缓冲输出流中的方法flush,把内存缓冲区中的数据,刷新到文件中 bw.flush(); //4.释放资源 bw.close(); } }
- readline()
public class Demo04BufferedReader { public static void main(String[] args) throws IOException { //1.创建字符缓冲输入流对象,构造方法中传递字符输入流 BufferedReader br = new BufferedReader(new FileReader("10_IO\\c.txt")); //2.使用字符缓冲输入流对象中的方法read/readLine读取文本 /* 不知道文件中有多少行数据,所以使用while循环 while的结束条件,读取到null结束 */ String line; while((line = br.readLine())!=null){ System.out.println(line); } //3.释放资源 br.close(); } }

浙公网安备 33010602011771号