IO流按流向可分两类:
输入流:InputStream /Reader。好比是一根水管,里面有挤满了的字节或者字符单位。隐士指针记录从哪个水滴开始读取。 读
输出流:OutpStream/Writer。 也是一个水管,只是里面没有任何水滴,当向水管里加水的时候,才开始注入水滴。写
提高性能:1.加缓冲 2处理流
InputStream /Reader:本身是抽象类,不能创建实例有方法 read() read(byte [] b) read(byte [] b,int off,int len)
FileInputStream FileReader 节点流。跟文件联系在一起。
字节可以处理任何数据类型,字符要比字节能处理的类型要少。 通常在处理文本时优先使用字符流,其他的用字节流 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。
java只提供了将字节流转换为字符流的方法
把经常读取文本的输入流写成BufferedReader
1.读取用户屏幕的输入
public class FileInputStreamTest { public static void main(String[] args) throws IOExceptio try ( //将输入流InpustStream 转化为Reader对象 转成字符输入流 InputStreamReader reader = new InputStreamRe //将普通的reader包装成BufferReader的U BufferedReader br = new BufferedReader(reader); ){ String line = null; while ((line=br.readLine())!=null){ if(line.equals("exit")){ System.exit(1); } System.out.print("输出内容:"+line); } } catch (IOException i) { i.printStackTrace(); } } }
2:向硬盘里写数据
try (FileWriter fw = new FileWriter("d:\\poem.txt")) { fw.write("锦瑟-李商隐\r\n"); fw.write("庄生晓梦"); } catch (IOException e) { e.printStackTrace(); } }
3.读取文件数据
public class HelloJava { public static void main(String[] args){ try { FileWriter fileWriter = new FileWriter("test.txt"); //写入数据到内存里 fileWriter.write("adadada"); //刷新流 fileWriter.flush(); fileWriter.close();//关闭流 }catch (IOException e) { e.printStackTrace(); } } }
try { FileReader fr = new FileReader("d:\\poem.txt"); char[] buf = new char[20]; int num = fr.read(buf); System.out.println("num" + num + new String(buf)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }