黑马程序员——IO流

---------------------- 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值