java_oi流

字符流
(1)字节流操作中文数据不方便,所以就出现了转换流
转换流的作用就是把字节流转换成字符流来使用
(2)转换流其实就是一个字符流 
字符流 = 字节流 + 编码表
(3)编码表
就是由字符和对应的数值组成的一张表
常见的编码表
ASCII
GBK 
UTF-8
字符串中的编码问题
编码
String -----> byte[]
解码
byte[] ----> String 
IO流 中的编码问题
  A:OtputStreamWrite
  OutputStreamWrite(OutputStream os):默认编码,GBK
  OutpurStreamWrite(OutputStream os,String charsetName):指定编码
字符流
Reader
----InputStreamReader 
-----FileRead
----BuffereReader
Writer
----OutputStreamWriter
-----FileWriter
----BuffereWriter

IO小结
IO流
字节流
--字节输入流
InputStream(抽象类)
int read();一次读取一个字节
int read(byte[] bys);一次读取一个字节数组
 
----FileInputStream(InputSream 的实现类)
----BufferedInputStream(字节缓冲区流---------高效 )(除了传入的是一个流对象以外,其他操作和FileInputStream 是一样的,这样做仅仅是因为高效而已)
BufferedInputStream(IutputStream out);//构造函数传入的是一个OutputStream对象,而不是一个文件的路径,这是因为字节缓冲区仅仅提供缓冲区,为了高效而设计的,真正的读写操作还需要考基本的流对象实现
--字节输出流
OutputStream 
void write(int by);一次写一个字节
void write(byte[] bys, int index, int len);一次写一个字节数组的一部分

---FileOutputStream
---BuffereOutputStream
字符流
字符流 = 字节流 + 编码表
--字符输入流
Reader
int read();一次读取一个字符
int read(char[] chs);一次读取一个字符数组
     
--InputStreamReader
-- FileReader(一般使用)
--BufferedReamRead
String readLine();一次读取一个字符串

--字符输出流
Writer 
void write(int ch);一次写一个字符
void write(char[] chs, int index, int len);一次写一个字符数组的一部分

--OutputStreamWriter
--FileWriter
--BufferedWriter
void newLine();写一个换行符
flush();刷新的方法一定要使用

void write(String line);一次写一个字符串
注意:对文件的追加写入的方式是:在构造方法的时候,传入第二个参数 true
OutputStreamWriter fosw = new OutputStreamWriter(new FileOutputStream("a.txt", true));
FileOutputStream fos = new FileOutputStream("a.txt", true)


案例

复制文本文件 5中方式

    import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyFileDemo { public static void main(String[] args) throws IOException { String scrString = "a.txt"; String destString = "b.txt"; method1(scrString,destString); method2(scrString,destString); method3(scrString,destString); method4(scrString,destString); method5(scrString,destString); } //基本字符一次读写一个字符 private static void method1(String scrString,String destString) throws IOException{ FileReader fr = new FileReader(scrString); FileWriter fw = new FileWriter(destString); int ch = 0; while((ch = fr.read()) != -1){ fw.write(ch); } fw.close(); fr.close(); } //基本字符流,一次写一个数组 private static void method2(String scrString,String destString) throws IOException{ FileReader fr = new FileReader(scrString); FileWriter fw = new FileWriter(destString); char[] chs = new char[1024]; int len = 0; while((len = fr.read(chs))!=-1){ fw.write(chs, 0, len); } fw.close(); fr.close(); } //字符缓冲流一次读写一个字符 private static void method3(String scrString,String destString) throws IOException{ BufferedReader br = new BufferedReader(new FileReader(scrString)); BufferedWriter bw = new BufferedWriter(new FileWriter(destString)); int ch = 0; while((ch = br.read())!=-1){ bw.write(ch); } bw.close(); br.close(); } //字符缓冲流 一次读写一个字符数组 private static void method4(String scrString,String destString) throws IOException{ BufferedReader br = new BufferedReader(new FileReader(scrString)); BufferedWriter bw = new BufferedWriter(new FileWriter(destString)); char[] chs = new char[1024]; int len = 0; while((len = br.read(chs)) != -1){ bw.write(chs, 0, len); } bw.close(); br.close(); } //字符缓冲流一次写一个字符串 private static void method5(String scrString,String destString) throws IOException{ BufferedReader br = new BufferedReader(new FileReader(scrString)); BufferedWriter bw = new BufferedWriter(new FileWriter(destString)); String line = null; while((line = br.readLine()) != null){ bw.write(line); bw.newLine(); bw.flush(); } bw.close(); br.close(); }}

复制图片(二进制流数据) 4中方式
把集合中的数据存储到文本文件
把文本文件中的数据读取到集合并遍历集合
复制单级文件夹
复制单级文件夹中指定的文件并修改名称
复制多级文件夹
键盘录入学生信息,按照总分从高到低存入到文本文件
把某个文件中的字符串排序后输出到另一个文本文件中
用Reader模拟BufferdReader的特有功能
模拟LineNumberReader的特有功能

你可能感兴趣的:(java_oi流)