Java中的IO操作

1.I/O操作的目标

   从数据源当中读取数据(I)以及将数据写入到数据目的地当中(O)

 

2.I/O的分类方法

    第一种分法:

      1.输入流

      2.输出流

    第二种分法:

      1.字节流(把字符转换为ASCII码,然后以字节的方式读取出来)

      2.字符流(读写文件时,以字符为基础)

    第三种分法:

      1.节点流(真正处理数据的IO流)

      2.处理流(在节点流的基础上对数据进行再加工.类似于装饰者(Decorator)模式)

3.读取文件写入文件的方法

 

a.字节流的操作

(1).文件内容较少的情况

from.txt 文件的内容为  abcd

to.txt的内容为空
(2).文件内容比较多(采用循环的方式读取,难道下一次读取都是在上一次读取完后的内容后面进行读取吗???)


import java.io.*;
class Test
{
  public static void main(String arg[])
  { 

//生成输入流的引用
  FileInputStream fis=null;

//生成输出流的引用
  FileOutputStream fos=null;
  try{

//生成代表输入流的对象
   fis=new FileInputStream("D:/src/from.txt");
//生成代表输入流的对象

 fos=new FileOutputStream("D:/src/to.txt");

//生成一个字节数组
   byte[] buffer=new byte[100];

//buffer:读取数据放在里面,off:表示偏移量,len:表示读取的长度
   fis.read(buffer,0,100);
   for(int i=0;i<buffer.length;i++)
          {

//输出的结果为96,97,98,99,0,0.....

//如果把上面的偏移量改为4,后面的长度必须改为96,否则出现下标越界的异常,输出的几位为:0,0,0,0,96,97,98,99,0,0......
    System.out.println(buffer[i]);  
          }

//将字节还原为字符
    String str=new String(buffer);   
    System.out.println(str.trim());

//写入
    fos.write(buffer,0,100);
  }
  catch(Exception e)
  {
  System.out.println(e);
  }
  finally
  {
    try{
     fis.close();
     fos.close();
    }catch(Exception e){
    System.out.println(e);
    }
  }
    }
}


 

import java.io.*;
class Test
{
  public static void main(String arg[])
  { 
  FileInputStream fis=null;
  FileOutputStream fos=null;
  try{
   fis=new FileInputStream("D:/src/from.txt");
   fos=new FileOutputStream("D:/src/to.txt");
    byte[] buffer=new byte[1024];

   
  while(true)
  {

   //当read()方法返回-1时,表示文件内容已经全部读完
     int iLen=fis.read(buffer,0,1024);
       if(iLen==-1)break;
        fos.write(buffer,0,1024);
  }

  }
  catch(Exception e)
  {
  System.out.println(e);
  }
  finally
  {
     try{
    fis.close();
    fos.close();
    }catch(Exception e)
    {
    System.out.println(e);
    }
  }

}
}

 


b.字符流的操作

(1).文件内容较少的情况

from.txt 文件的内容为  abcd

to.txt的内容为空

import java.io.*;
class Test
{
  public static void main(String arg[])
  { 
  FileReader fr=null;
  FileWriter fw=null;
    try
     {
   fr=new FileReader("d:/src/from.txt");
   fw=new FileWriter("d:/src/to.txt");

//注意:这里是使用char[],而在字节流中使用 的是byte[]
   char[] buffer=new char[100];
   fr.read(buffer,0,100);
   for(int i=0;i<buffer.length;i++)
   {

//输出结果为a,b,c,d,空,空......
     System.out.println(buffer[i]);
   }

//写入
 fw.write(buffer,0,100);     }
  catch(Exception e)
  {
    System.out.println(e);
  }
  finally
  {
     try{fr.close();fw.close();}
  catch(Exception e){System.out.println(e);}
  }
  }
  
}

c.处理流的使用实例

  (1).创建一个文件user.txt  内容如下:

  

   2.声明一个类Test.java,代码如下:

import java.io.*;
class Test
{
  public static void main(String arg[])
  { 
  FileReader fr=null;
  BufferedReader bufferedReader=null;
    try
     {
   fr=new FileReader("d:/src/users.txt");

  //生成BufferedReader对象(参数为FileReader类的对象,用到了设计模式中的"装饰者(Decorator)模式")
   bufferedReader=new BufferedReader(fr);
   String line=null;
   while(true){

  //读一行
       line=bufferedReader.readLine();
    if(line==null)
    {
      break;
    }
    System.out.println(line);
   }

     }
  catch(Exception e)
  {
    System.out.println(e);
  }
  finally
  {
     try{fr.close();bufferedReader.close();}
  catch(Exception e){System.out.println(e);}
  }
  }
  
}

3.执行结果:

 

总结:

    I/O当中的核心类FileInputStream 继承自 InputStream,FileOutputStream 继承自OutputStream.

                               FileReader 继承自Reader,FileWriter继承自Writer

    I/O核心类的核心方法: InputStream

                                        int read(byte[] b,int off,int len) //返回读取的数据长度,读取的数据都放在参数b中,off参数表示偏移量(在第几个位置输出),len参数表示读取的长度

                                       OutputStream

                                        void write(byte[],int off,int len)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值