黑马程序员——IO流

来源:互联网 发布:仙掌游戏 倒闭 知乎 编辑:程序博客网 时间:2024/04/30 11:16

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

IO流

 流即数据的流动,从某一个设备流动到另外一个设备中的过程。Java中对流的输入输出(IO)操作主要有两种,对字节流和字符流的输入输出操作。


IO流体系


   |─字符流 JDK1.1
   |       |─Writer 写入流
   |       |       |─PrintWriter 字符打印流                                       

   |       |       |─StringWriter 字符串写入流                                   
   |       |       |─BufferedWriter 字符写入流缓冲区                                   
   |       |       |─CharArrayWriter 字符数组写入流缓冲区               
   |       |      └─OutputStreamWriter 字符转换字节流                
   |       |                 └-FileWriter 字符文件写入流                
   |       |
   |      └─Reader 读取流
   |              |-StringReader 字符串读取流 
   |              |-BufferedReader 字符读取流缓冲区 
   |              |        └─LineNumberReader 跟踪行号的缓冲字符输入流
   |              |-CharArrayReader 字符数组读取流缓冲区 
   |             └─InputStreamReader 字节转换字符流
   |                       └─FileReader 字符文件读取流 
   |
   |─字节流 JDK1.0
   |       |─InputStream 输入流
   |       |        |─FileInputStream 文件输入流
   |       |        |─PipedInputStream 管道输入流
   |       |        |─ObjectInputStream 对象输入流
   |       |        |─SequenceInputStream 合并输入并流
   |       |        |─ByteArrayInputStream 字节数组输入流缓冲区
   |       |       └─FilterInputStream
   |       |                  |─DataInputStream 数据输入流
   |       |                 └─BufferedInputStream 字节输入流缓冲区
   |       |
   |      └─OutputStream 输出流
   |                 |─FileOutputStream 文件输出流 
   |                 |─PipedOutputStream 管道输出流 
   |                 |─ObjectOutputStream 对象输出流 
   |                 |─ByteArrayOutputStream 字节数组输出流缓冲区 
   |                └─FilterOutputStream
   |                            |─DataOutputStream 数据字节输出流 
   |                           └─BufferedOutputStream 字节输出流缓冲区                                    
   └─File 类


IO流实例


//一个通过IO复制硬盘文件的例子  class CopyTest{      public static void main(String[] args) throws IOException{          //创建读取流和写入流对象引用          BufferedReader bufr = null;          BufferedWriter bufw = null;              try{              //创建对象实体,并用缓冲流修饰            bufr = new BufferedReader(new FileReader("1.txt"));              bufw = new BufferedWriter(new FileWriter("2.txt"));                                  //读取流中的行字符串存储在line中,直到流中没有数据,会返回null              String line = null;              while((line=bufr.readLine())!=null){                  bufw.write(line); //读一行写入一行到缓冲区中                  bufw.newLine();  //加入换行标记,因为readLine在读取的时候是会去掉换行标记的                bufw.flush();   //把缓冲区内的数据刷新到到硬盘文件里              }          }          catch (IOException e){              throw new RuntimeException("读取失败");          }          finally{              try{                  if(bufr!=null)  //对bufr进行非null判断是因为如果在最开始建立bufr对象的时候建立不起来,//下面的bufr.close()会发生空指针异常,因为没有bufr这个对象                    bufr.close();  //关闭读取流资源              }              catch (IOException e){                  throw new RuntimeException("读取流关闭失败");              }              try{                  if(bufw!=null)     //道理同上                      bufw.close();              }              catch (IOException e){                  throw new RuntimeException("写入流关闭失败");              }          }      }  }


//把键盘录入的字符串字母转成大写,并以UTF-8的编码形式写入硬盘文件class IOTest{      public static void main(String[] args) throws IOException{          BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));                         BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("out2.txt"),"UTF-8"));  //UTF-8将字符编码成字节,一个中文占3个字节//GBK和GB2312编码表就占两个字节,ISO8859-1西欧编码表,一个字节                   String line =null;          while((line=bufr.readLine())!=null){              if("over".equals(line))            //如果输入over,就结束循环                  break;              bufw.write(line.toUpperCase());                 bufw.newLine();                    //换行,如果用PrintWriter打印流的话就不用加newLine,还能自动刷新            bufw.flush();                              }          bufw.close();                               }  } 


---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
原创粉丝点击