Java面向对象 IO (二)

来源:互联网 发布:凸包算法 matlab 编辑:程序博客网 时间:2024/06/11 19:32


Java面向对象  IO   (二)


知识概要:

              (1)字节流概述

              (2)字节流复制图片

              (3)IO流(读取键盘录入)

              (4)读取转换流,写入转换流

             


字节流概述

      基本操作与字符流类相同
      但它不仅可以操作字符,还可以操作其他媒体文件
      例如 
         • Copy一个Jpg文件。

字节流:
        InputStream  OutputStream

        需求,想要操作图片数据。这时就要用到字节流。复制一个图片.

import java.io.*;class  FileStream{public static void main(String[] args) throws IOException{readFile_3();}public static void readFile_3()throws IOException{FileInputStream fis = new FileInputStream("fos.txt");//int num = fis.available();byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。不用在循环了。fis.read(buf);System.out.println(new String(buf));fis.close();}public static void readFile_2()throws IOException{FileInputStream fis = new FileInputStream("fos.txt");byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){System.out.println(new String(buf,0,len));}fis.close();}public static void readFile_1()throws IOException{FileInputStream fis = new FileInputStream("fos.txt");int ch = 0;while((ch=fis.read())!=-1){System.out.println((char)ch);}fis.close();}public static void writeFile()throws IOException{FileOutputStream fos = new FileOutputStream("fos.txt");<span style="color:#ff0000;">fos.write("abcde".getBytes());</span>fos.close();}}


复制一个图片
      思路:
1,用字节读取流对象和图片关联。
2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
3,通过循环读写,完成数据的存储。
4,关闭资源。


import java.io.*;class  CopyPic{public static void main(String[] args) {FileOutputStream fos = null;FileInputStream fis = null;try{fos = new FileOutputStream("c:\\2.bmp");fis = new FileInputStream("c:\\1.bmp");byte[] buf = new byte[1024];int len = 0;while((len=fis.read(buf))!=-1){fos.write(buf,0,len);}}catch (IOException e){throw new RuntimeException("复制文件失败");}finally{try{if(fis!=null)fis.close();}catch (IOException e){throw new RuntimeException("读取关闭失败");}try{if(fos!=null)fos.close();}catch (IOException e){throw new RuntimeException("写入关闭失败");}}}}
IO流(读取键盘录入)


*读取键盘录入。System.out:对应的是标准输出设备,控制台。System.in:对应的标准输入设备:键盘。需求:通过键盘录入数据。当录入一行数据后,就将该行数据进行打印。如果录入的数据是over,那么停止录入。*/import java.io.*;class  ReadIn{public static void main(String[] args) throws IOException{InputStream in = System.in;StringBuilder sb = new StringBuilder();while(true){int ch = in.read();if(ch=='\r')continue;if(ch=='\n'){String s = sb.toString();if("over".equals(s))break;System.out.println(s.toUpperCase());sb.delete(0,sb.length());}elsesb.append((char)ch);}}}

读取转换流,写入转换流

 InputStreamReader,OutputStreamWriter

  转换流的由来
      • 字符流与字节流之间的桥梁
      • 方便了字符流与字节流之间的操作
  转换流的应用
      • 字节流中的数据都是字符时,转成字符流操作更高效。

  例程:标准输入输出。

     能不能直接使用readLine方法来完成键盘录入的一行数据的读取呢?
      readLine方法是字符流BufferedReader类中的方法。

      键盘录入的read方法是字节流InputStream的方法。

      那么能不能将字节流转成字符流在使用字符流缓冲去的readLine方法呢?

代码演示

import java.io.*;class  TransStreamDemo{public static void main(String[] args) throws IOException{//获取键盘录入对象。//InputStream in = System.in;//将字节流对象转成字符流对象,使用转换流。InputStreamReader//InputStreamReader isr = new InputStreamReader(in);//为了提高效率,将字符串进行缓冲区技术高效操作。使用BufferedReader//BufferedReader bufr = new BufferedReader(isr);//键盘的最常见写法。BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));//OutputStream out = System.out;//OutputStreamWriter osw = new OutputStreamWriter(out);//BufferedWriter bufw = new BufferedWriter(osw);BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));String line = null;while((line=bufr.readLine())!=null){if("over".equals(line))break;bufw.write(line.toUpperCase());bufw.newLine();bufw.flush();}bufr.close();}}





0 0