传统IO模型——流模型
Java IO分类
文件输入/输出流
FileInputStream/FileReader
FileOutputStream/FileWriter
示例:文件拷贝(字节流)
public void doCopy(){ FileInputStream fis = null; FileOutputStream fos = null; try{ fis = new FileInputStream(sourceFile); fos = new FileOutputStream(newFile); byte[] buffer = new byte[1024]; int hasRead = 0; while((hasRead=fis.read(buffer))>0){ fos.write(buffer,0,hasRead); } }catch(IOException e){ }finally{ if(fis != null) fis.close(); if(fos != null) fos.close(); } }
文件拷贝(字符流)
pubilc void doCopy(){ FileReader fr = null; FileWriter fw = null; try{ fr = new FileReader(sourceFile); fw = new FileWriter(newFile); char[] buffer = new char[32]; int hasRead = 0; while((hasRead = fr.read(buffer)>0)){ fw.write(buffer,0,hasRead); } }catch(){}finally{} if(fr != null) fr.close(); if(fw != null) fw.close(); }
包装流 :
隐藏底层设备上的节点流的差别。对外提供更加方便的输入/输出方法。
如:利用PrintStream输出字符串和对象——PrintStream.println(String) ,PrintStream.println(Object);
//节点流 FileOutputStream fos = new FileOutputStream(file); //节点流 --> 包装流 PrintStream ps = new PrintStream(fos); ps.println(string); ps.println(object);
BufferedReader.readLine()方便读取一行内容;
//InputStream --> Reader InputStreamReader reader = new InputStreamReader(System.in); //节点流 --> 包装流 BufferedReader br = new BufferedReader(reader); String buffer; while((buffer = br.readLine()) != null){ // }
注意:如果执行输入/输出的内容是文本内容,则考虑使用字符流;
如果是二进制内容,则考虑使用字节流。
转换流 (InputStreamReader/OutputStreamWriter):
字节流 --> 字符流
InputStreamReader reader = new InputStreamReader(InputStream);
OutputStreamWriter writer = new OutputStreamWriter(OutputStream);
RandomAccessFile