(标准输入输出流是字节输出流)
InputStream System.in/OutputStream System.out
//创建输入流对象 BufferedReader br = new BufferedReader(new FileReader("src/测试资料.txt")); //创建输出流对象 OutputStream os=System.out; String line=null; while((line=br.readLine())!=null) { os.write(line.getBytes()); os.write("\r\n".getBytes()); } os.close(); br.close(); |
字符缓冲输入流读取数据到内存 字节标准输出流写出数据到磁盘 |
BufferedReader br = new BufferedReader(new FileReader("src/测试资料.txt")); Writer wt=new OutputStreamWriter(System.out); String line=null; while((line = br.readLine())!=null) { wt.write(line); wt.write("\r\n"); } wt.close(); br.close(); |
字符缓冲输入流读取数据到内存 字节输出流写出数据到磁盘 |
BufferedReader br=new BufferedReader(new FileReader("src/测试资料.txt")); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); String line=null; while((line=br.readLine())!=null) { bw.write(line); bw.newLine(); } bw.close(); br.close(); |
字符缓冲输入流读取数据到内存 字符输出流写出数据到磁盘 |
//创建字节输入流 InputStream is=System.in; //创建字符输出流 FileWriter fw=new FileWriter("a.txt"); //读写数据 byte[] data=new byte[1024]; int len=-1; while((len=is.read(data))!=-1) { fw.write(new String(data,0,len)); fw.flush(); } //关闭资源 fw.close(); is.close(); |
字节标准输入流读取数据到内存 字符输出流写出数据到磁盘 |
//创建字节输入流 InputStreamReader isr=new InputStreamReader(System.in); //创建字符输出流 FileWriter fw=new FileWriter("a.txt"); //读写数据 char[] data=new char[1024]; int len=-1; while((len=isr.read(data))!=-1) { fw.write(data,0,len); fw.flush(); } //关闭资源 fw.close(); isr.close(); |
字节输入流读取数据到内存 字符输出流写出数据到磁盘 |
打印流PrintStream
PrintWriter
可以自动换行
不能输出字节,可以输出其他任意类型
可以实现自动刷新(在调用println、printf、format的时候)
可以将字节输出流转化成字符输出流
PrintWriter pw=new PrintWriter(new FileWriter("a.txt"),true);//实现自动刷新println、printf、format pw.write("hello"); pw.println(" world"); pw.print("!!!"); pw.close(); |
复制文件a.txt
//输入流 BufferedReader br=new BufferedReader(new FileReader("a.txt")); //打印流 PrintWriter pw=new PrintWriter(new FileWriter("b.txt"),true); //从内存写出数据到磁盘 String line=null; while((line=br.readLine())!=null) { pw.println(line); } //关闭流 pw.close(); br.close(); |
对象流ObjectOutputStream、ObjectInputStream
存取对象
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("a.txt")); Student stu=new Student("张三",16); oos.writeObject(stu); oos.close(); ObjectInputStream ois=new ObjectInputStream(new FileInputStream("a.txt")); Student stu1 =(Student) ois.readObject(); System.out.println(stu1.toString()); ois.close(); |
需要对Student类实现序列化接口 |
存取对象集合
List<Student> list=new ArrayList<Student>(); Student stu1=new Student("张三",16); Student stu2=new Student("李四",20); list.add(stu1); list.add(stu2); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt")); oos.writeObject(list); ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt")); ArrayList<Student> li=(ArrayList<Student>) ois.readObject(); for (Student student : li) { System.out.println(student.toString()); } oos.close(); |
解决序列化接口出现的黄色警告:实现对Student类序列化编号。
Properties类实现了Map接口
//创建属性列表对象 Properties pro=new Properties(); //添加映射关系 pro.put("name", "zhangsan"); pro.put("age", "15"); //遍历属性列表 //方式一 Set<Object> keySet = pro.keySet(); for(Object key:keySet) { Object value=pro.get(key); System.out.println(key+"="+value); } //方式二 Set<Entry<Object, Object>> entrySets = pro.entrySet(); for(Entry<Object,Object> entrySet:entrySets) { Object key=entrySet.getKey(); Object value=entrySet.getValue(); System.out.println(key+" "+value); } |
Properties和IO流结合
与PrintWriter打印流结合
Properties pr=new Properties(); pr.setProperty("name", "lisi"); pr.setProperty("age", "18"); PrintWriter out=new PrintWriter("src/pro.properties"); pr.list(out); out.close(); |
与FileReader字符输入流结合
Properties pro=new Properties(); FileReader fr=new FileReader("src/pro.properties"); pro.load(fr); fr.close(); System.out.println(pro); |
与FileWriter字符输出流结合
Properties pr=new Properties(); pr.setProperty("name", "lisi"); pr.setProperty("age", "18"); FileWriter fw=new FileWriter("src/p.properties"); pr.store(fw, "Hello World"); fw.close(); |