java学习记录(五)IO

【1】File 对象 描述文件的信息

          File对象内部封装了一个抽象类FileSystem,FileSystem有一个native方法getFileSystem()来获取FileSystem对象

          exists() 判断文件或目录是否存在


【2】IO 流
-- 字符流
  -- 字符输出流
    -- Writer
 -- OutputStreamWriter 
 -- FileWriter(OutputStreamWriter 子类)
 -- BufferedWriter
 -- PrintWriter 打印流
 -- PipedWriter


  -- 字符输入流
    -- Reader
 -- InputStreamReader
 -- FileReader(InputStreamReader 子类)
 -- BufferedReader
   --LineNumberReader 
      -- PipedReader
 
-- 字节流
  -- 字节输出流
    -- InputStream
 -- FileInputStream
 -- BufferedOutputStream
 -- PrintStream 打印流
 -- SequenceInputStream 合并流
 
 -- ObjectOutputStream 序列化,要序列化的类必须实现 Serializable 接口
                       静态成员是不能被序列化的
如果不想被序列化,用关键字 transient
 
 -- PipedOutputStream 管道流
  
  -- 字节输入流
    -- OutputStream
 -- FileOutputStream
 -- BufferedInputStream
 -- ObjectInputStream 
 -- PipedInputStream 
  
  -- RandomAccessFile 
     具体用法见 http://www.iteye.com/blogs/tag/RandomAccessFile
http://blog.csdn.net/akon_vm/article/details/7429245


1. 流操作规律:
 
 1) 确定源和目的
    -- 源 :用输入流 InputStream,Reader 及其子类
    -- 目的 : 用输出流 OutputStream, Writer 及其子类
 
 2) 确定文件是否为纯文本,确定用字节流还是字符流
 
 3) 确定具体的流对象

 4) 使用Buffered对象接收流对象

 5) 为了操作方便,因为键盘录入的数据都是字符,所以一般将 System.in 转换成字符流操作.
    使用 InputStreamReader 

2. IO 流异常处理
        FileWriter fw = null;
try
{
fw = new FileWriter("a.txt");
}

catch(Exception e)
{
//异常处理代码 throw new RuntimeException("");
}

finally
{
if(fw!=null)
 try
 {
fw.close();
 }
 catch(Exception e)
 {
 //异常处理代码
 }
}


3. buffered:
   
   1) 读取命令行输入的方式:
      BufferedReader buf = 
            new BufferedReader(new InputStreamReader(System.in))
   
   2) BufferedReader 特殊方法 readLine() 读取一行文本
      BufferedWriter 特殊方法 newLine() 换行
 PS: windows下换行符为 "\r\n"


   3) BufferedReader BufferedWriter  BufferedInputStream BufferedOutputStream
      默认数组大小为8192
      private static int defaultBufferSize = 8192;
   
   4) BufferedReader 和 BufferedInputStream 分别有一个子类 
      LineNumberReader 和 LineNumberInputStream 。 不过 LineNumberInputStream jdk1.1中已过时


 LineNumberReader 特殊方法 getLineNumber()和setLineNumber()


4. 字节流
   
   1) InputStream 有一个 available() 方法,返回文件的大小


   2) read 方法在读字节的时候会将 byte 提升为 int, 然后做 &255 运算, 
      write方法写的时候只写最低8位


 因为在读取字节的时候可能会遇到11111111连续8个1,即为-1,会导致read读到结束
 标记提前结束.


5. 如果要将数据转换为指定的编码表格式保存或者读取,用 InputStreamReader 和 OutputStreamWriter
   指定编码表
    
   BufferedWriter bw = 
        new BufferedWriter(new OutputStreamWriter(new FileOutStream("文件名"),"编码表"))
   
6. FileReader 和 FileWriter 使用的默认码表
   如果要使用其他码表,则需要使用其父类 InputStreamReader 和 OutputStreamWriter  


7. System.setIn() System.setOut() 可以改变标准输入输出设备
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值