1. 编码问题
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文本是byte byte byte..的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储
2.字符流 Reader/Writer --操作的是文本文本文件(gbk编码)
字符的处理,一个字符一个字符的处理
字符的底层依旧是字节序列
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
public static void main(String[] args) { InputStreamReader inputStreamReader = null; OutputStreamWriter outputStreamWriter = null; try { inputStreamReader = new InputStreamReader(new FileInputStream("demo/demo.dat"), "utf-8"); //默认项目的编码就是 // int c; // while ((c = inputStreamReader.read()) != -1){ // System.out.println((char)c); // } outputStreamWriter = new OutputStreamWriter(new FileOutputStream("demo/dos.dat"), "utf-8"); char[] buffer = new char[8 * 1024]; int c; while ((c = inputStreamReader.read(buffer, 0, buffer.length)) != -1) { String s = new String(buffer, 0, c); System.out.println(s); outputStreamWriter.write(buffer, 0, c); } outputStreamWriter.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (inputStreamReader != null) { inputStreamReader.close(); } if (outputStreamWriter != null) { outputStreamWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } }
3. FileReader/FileWriter
public class FileReaderAndWriter { public static void main(String[] args) { FileReader fileReader = null; FileWriter fileWriter = null; try { fileReader = new FileReader("demo/raf.dat"); fileWriter = new FileWriter("demo/dos.dat", true); //true追加 char[] buffer = new char[8 * 1024]; int c; while ((c = fileReader.read(buffer, 0, buffer.length)) != -1) { fileWriter.write(buffer, 0, c); } fileWriter.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileReader != null) { fileReader.close(); } if (fileWriter != null) { fileWriter.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
4. 待续