------- android培训、java培训、期待与您交流! ----------
字符流的特点: 数据最常见的体现形式是:文件 需求:在硬盘上,创建一个文件,并写入一些文字数据。 用于操作操作文件的Writer的子类FileWriter,后缀名是父类名。前缀名是该流对象的功能。 操作步骤: 1.创建一个FileWriter对象。该对象一被初始化就必须明确要被操作的文件,该文件会被创建到指定目录下,如果该目录下已经有同名文件,将被覆盖 FileWriter fw=new FileWriter("demo.txt"); 2.调用write方法,将字符串写入到流中。 fw.write(); 3.刷新流对象中的缓冲中的数据,将数据刷到目的地 fw.flush(); 4.关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,将数据刷到目的地中。和flush的区别,flush刷新后,流可以继续使用,close刷新后 将会将流关闭。 fw.close();
练习 :读取一个.java文件。并打印在控制台上。 FileReader fr=null; char[] buf=new char[1024]; int num=0; try { fr= new FileReader("a.txt"); try { while((num=fr.read(buf))!=-1){ System.out.print(new String(buf,0,num)); } } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if(fr!=null) fr.close(); } catch (IOException e) { e.printStackTrace(); } }————————————————————————————————————————————————
字符流的缓冲区 缓冲区的出现提高了对数据的读写效率 对应类: BUfferWriter BufferedReader 特点:缓冲区要结合流才可以使用,在创建缓冲区之前,必须要有流对象。在流的基础上对流的功能进行了增强。 BUfferWriter步骤: 1.创建一个字符写入流对象 FileWriter fw=new FileWriter("a.txt"); 2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数 bufferedWriter bufw=new BufferedWriter(fw); buff.write("asdasdas"); bufw.newLine();//换行符,跨平台的 3.将缓冲区刷新 bufw.flush; 4.关闭缓冲区,就是在关闭缓冲区中的流对象 bufw.close(); BufferedReader步骤 1.创建一个字符写入流对象 FileReader fr=new FileReader ("a.txt"); 2.将需要被提高效率的流对象作为参数传递给缓冲区的构造函数 BufferedReader bufr=new BufferedReader (fr); 3.读取流对象:该缓冲区提供了一个一次读取一行的方法。当返回null时表示,文件读到末尾 String line=null; while((line=bufr.readLine())!=null) { String s=line;} 4.关闭 bufr.close(); readLine()方法的原理: 无论是读一行,获取多个字符,最终都是在硬盘上一个一个读取,最终使用额还是read方法一次读一个的方法。
缓冲区练习.:通过缓冲区复制一个文件 BufferWriter bufw=null; BufferReader bufr=null; try { bufw=new BufferWriter(new FileWriter("b.txt")); bufr=new BufferReader(new FileReader("a.txt")); String line=null; while ((line=buffr.read(buf))!=null){ bufw.write(line); bufw.newLine(); bufw.flsuh; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } try { fw.close(); } catch (IOException e) { e.printStackTrace(); } }————————————————————————————————————————————————
操作图片数据就要用到字节流。 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]。 字节流: InputStream 读 Outputstream 写 读取 FileInputStream fis=new FileInputStream ("a.txt"); byte[] buf=new byte[fis].available(0)];//定义一个刚刚好的缓冲区,不用再循环了 fis.read(buf); System.out.println(new String(buf)); fis.close(); 练习:复制图片 FileOutputStream fw=null; FileInputStream fr=null; try { fos=new FileOutputStream("b.jpg"); fis=new FileInputStream("a.jpg"); byte[] buf=new byte[1024]; int num=0; while ((num=fis.read(buf))!=-1){ fis.write(buf,0,num); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if(fis!=null) fis.close(); } catch (IOException e) { e.printStackTrace(); } try { fos.close(); } catch (IOException e) { e.printStackTrace(); } }————————————————————————————————————————————
读取键盘录入 System.out:对应的是标准输出设备,控制台 System.in:对应的标准输入设备,键盘 代码 InputStream in=System.in; int by=in.read(); sop(by); 结束录入 in.close————————————————————————————————————————
转换流 读取转换流:InputStreamReader 写入转换流:OutputStreamReader 读取转换流:InputStreamReader 字节流通向字符流的桥梁 步骤 1.获取键盘录入对象 Inputstream in=System.in 2.将字节流对象转换成字符流对象,使用转换流InputStreamReader InputStreamReader isr=new InputStreamReader(in); 3.提高效率使用字符流缓冲区 BufferedReader进行读取 BufferedReader bf=new BufferedReader(is); String line=null; while((line=bf.readLine())!=null) { if("over".equals(line)) break; sop(line); } bufr.close; 写入转换流:OutputStreamReader 字符流通向字节流的桥梁 步骤 1.获取输出对象 Outputstream out=System.out 2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter OutputstreamWriter osw=new OutputstreamWriter(out); 3.提高效率使用字符流缓冲区 BufferedWriter进行写入 BufferedWriter bw=new BufferedWriter(osw); String line=null; while((line=bf.readLine())!=null) { if("over".equals(line)) break; bw.write(line); bufw.newLine(); } bufr.close;——————————————————————————————————————————————————————
转换流 读取转换流:InputStreamReader 写入转换流:OutputStreamReader 读取转换流:InputStreamReader 字节流通向字符流的桥梁 步骤 1.获取键盘录入对象 Inputstream in=System.in 2.将字节流对象转换成字符流对象,使用转换流InputStreamReader InputStreamReader isr=new InputStreamReader(in); 3.提高效率使用字符流缓冲区 BufferedReader进行读取 BufferedReader bf=new BufferedReader(is); String line=null; while((line=bf.readLine())!=null) { if("over".equals(line)) break; sop(line); } bufr.close; 写入转换流:OutputStreamReader 字符流通向字节流的桥梁 步骤 1.获取输出对象 Outputstream out=System.out 2.将字符流对象转换成字节流对象,使用转换流OutputstreamWriter OutputstreamWriter osw=new OutputstreamWriter(out); 3.提高效率使用字符流缓冲区 BufferedWriter进行写入 BufferedWriter bw=new BufferedWriter(osw); String line=null; while((line=bf.readLine())!=null) { if("over".equals(line)) break; bw.write(line); bufw.newLine(); } bufr.close;