java io 1

一直对java的io操作晕晕乎乎的,这几天经理不让用ibatis的插入blob模式了,说ias支持的不是很好,所以都改成了jdbc读写blob的模式,所以回顾巩固一下java 的io

 

高阶IO: 操作String,char
低阶IO: 操作byte[]
****原则:使用高级IO前一定要先建立低级IO,高级IO才能使用

 

低阶IO
inputstream  --- read()  ---   读入内部 从外部将数据读入到字节数组byte[]
outputstream --- write() --- 写入外部 从内部的byte[]写入外部

 


1. FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream类
read()  从输入流读取1个byte
read(byte[] b) 从输入流一次读取b.length个byte到byte[],娶不到数据返回-1
实例1(利用bis.read(b)!=-1来循环读取):
 


  1.   //从1.txt读取数据写入2.txt
  2.   FileInputStream fis = new FileInputStream("E://iotest//1.txt");
  3.   //inputstream增加缓冲功能
  4.   BufferedInputStream bis = new BufferedInputStream(fis);
  5.   //定义缓冲数组的大小为4,一次读取4byte
  6.   byte[] buffer = new byte[4];
  7.   //输出内容到2.txt,而且是追加方式而不是覆盖
  8.   FileOutputStream fos = new FileOutputStream("E://iotest//2.txt",true);
  9.   //outputstream增加缓冲功能
  10.   BufferedOutputStream bos = new BufferedOutputStream(fos);
  11.    //每次实际读取到的byte数
  12.   int len = 0;
  13.   //记录读取次数
  14.   int count = 1;
  15.   //如果实际读取到-1个byte,代表读取到文件末尾了
  16.   while((len = bis.read(buffer)) != -1){
  17.    System.out.println("第"+ count + "次,实际读取到 "+ len + "个字节");
  18.    //控制台输出实际读取的byte[]转换的String
  19.    System.out.println(new String(buffer,0,len));
  20.    //写入实际读取byte到2.txt
  21.    bos.write(buffer,0,len);
  22.   }
  23.   System.out.println("共写了" + (count-1) + "次");
  24.   bos.flush();
  25.   //bos关闭自动就会flush
  26.   bos.close();
  27.   //只关闭装饰好的类就可以了,被装饰类其实不用关闭
  28.   bis.close();

实例2(利用fis.avaliable()>0来循环读取)


  1.   FileInputStream fis = new FileInputStream("E://iotest//1.txt");
  2.   BufferedInputStream bis = new BufferedInputStream(fis);
  3.   FileOutputStream fos = new FileOutputStream("E://iotest//2.txt");
  4.   BufferedOutputStream bos = new BufferedOutputStream(fos);
  5.   int count = 1;
  6.   
  7.   //每次循环bis.available()的大小都会减去以读取的byte数目,即new byte[5],如果还有剩余byte未读取则继续循环
  8.   while (bis.available() > 0) {
  9.    System.out.println("available =" + bis.available());
  10.    byte[] buffer = new byte[5];
  11.    int len = bis.read(buffer);
  12.    if (len != -1) {
  13.     System.out.println("第" + count + "次,实际读取到 " + len + "个字节");
  14.     System.out.println(new String(buffer, 0, len));
  15.     bos.write(buffer, 0, len);
  16.     count++;
  17.    } else {
  18.     break;
  19.    }
  20.   }
  21.   System.out.println("共写了" + (count - 1) + "次");
  22.   bos.close();
  23.   fis.close();

read(byte[] b,0,length)从输入流一次读取length个byte到byte[]中去,没啥用,带偏移量的一般使用的是os的write(b,0,len)

 

2.  FileWriter和FileOutputStream的最大不同也在於写入单位的不同,FileOutputStream为byte,FileWriter为char,FileReader 判断还有

没有能读取的char用 ready() 来判断,缓冲数组是char[],而FileInputStream用avaliable()和byte[]

3. BufferedWriter和BufferedReader

  1.   FileReader fr = new FileReader("e://iotest//1.txt");
  2.   BufferedReader br = new BufferedReader(fr);
  3.   FileWriter fw = new FileWriter("e://iotest//1c1.txt");
  4.   BufferedWriter bw = new BufferedWriter(fw);
  5.   String line;
  6.   int count = 0;
  7.   while ((line = br.readLine()) != null) {
  8.    bw.write(line);
  9.    //每写一行文件都要调用newLine()来结束这一行,java会根据操作系统添加/r/n or /n
  10.                         //网络编程里面就不要写这个,因为不能判断方法了,
  11.    bw.newLine();
  12.    count++;
  13.   }
  14.   System.out.println(count);
  15.   bw.close();
  16.   br.close();

4. File
   length() 返回byte大小
   lastModified() 返回long的最后更新时间
   File f1 = new File("1.txt");
   File f2 = new File ("2.txt");
   //f1 更名为 f2或者 移动文件
   f1.renameTo(f2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值