IO字符流
在字节流中,因为中文字符使用多个字节且不同编码表有区别,因此可能会出现乱码。用字符流可以有效解决该问题。
字符输入流Reader
方法:read、read(char[] chars)、close,作用与字节流类似
一个子类
文件字节输入流
继承关系:
FileReader extends InputStreamReader extends Reader
作用:把文件以字符形式从硬盘读入内存
构造方法:
FileReader(String filename)
FileReader(File file)
作用:
1.创建一个FileReader对象;
2.把该对象指向要读的文件
使用步骤:
1.创建一个FileReader对象,构造方法传递数据读取目的地
2.调用FileReader对象的read方法,读取数据
3.释放资源(调用close方法)
代码练习
public static void main(String[] args) throws IOException { File file = new File("Month" + File.separator + "src" + File.separator + "LearnIO" + File.separator + "a.txt"); FileReader fileReader = new FileReader(file); char[] cr = new char[1024]; while(fileReader.read(cr) != -1) { System.out.print(cr); } fileReader.close(); }
方法:write、write(char[] chars)、write(String string)、flush、close,作用与字节流类似
一个子类
文件字节输出流
继承关系: FileWriter extends OutputStreamWriter extends Writer
作用:把文件以字符形式从内存写入缓冲区
构造方法: FileWriter(String filename)
FileWriter(File file)
作用: 1.创建FileWriter对象 2.根据构造方法中传递的文件/文件路径,创建一个空文件 3.把对象指向创建好的文件
使用步骤:
1.创建一个FileWriter对象,构造方法传递数据读取目的地 2.调用FileWriter对象的write方法,将数据写入缓冲区
3.调用flush方法,把内存缓冲区数据刷新到文件中
(该方法不会关闭流,流对象可以继续使用)
4.释放资源(调用close方法)
代码练习
public static void main(String[] args) { File file = new File("Month" + File.separator + "src" + File.separator + "LearnIO" + File.separator + "a.txt"); FileWriter fileWriter = null; try { fileWriter = new FileWriter(file, true); String str = "java程序"; fileWriter.write(str); fileWriter.flush(); } catch (IOException var12) { var12.getStackTrace(); } finally { if (fileWriter != null) { try { fileWriter.close(); } catch (IOException var11) { var11.getStackTrace(); } } }
追加与换行
FileWriter类的构造方法
FileWriter(String pathname ,boolean append)
FileWriter(File file ,boolean append)
参数boolean append 是追加开关
true: 创建对象不会创建文件,在源文件后追加写入数据
flase: 覆盖原文件
换行符号: win: linux:/n mac:/r