Java中的I/O流,写入文本和读取文本数据的方法,建立一个文件帮助类FileHelper

一、输入输出流

流的概念:Java中流相当于一个通道,其流的作用就是用来进行数据的传输的。

流的工作原理:Java中所有I/O机制都是通过流来进行输入输出的,流表示数据以有序的序列流动,相当于一条小溪一样流着,并且具有方向性:输入流、输出流。

流的实现方法:现实中数据是多种形式的,有字节、有字符等。所以发明了用不同的类来实现不同的数据进行输入和输出流,这些类被存放在java.io包中。

流的两大类型和四大类:

1、以字节为单位读取和写入文件的字节流

  • InputStream: 向内输入数据,数据单位都是字节(8位)。
  • OutputSteam:向外输出数据,数据单位都是字节(8位)。

2、以字符为单位读取和写入文件的字符流

  • Reader:向程序中输入数据,数据单位都是字符(16位)。
  • Writer:向外输出数据,数据单位都是字符(16位)。
     


 

二、写入(输出)文本OutputStream

当我们需要把数据写入到磁盘某文件文本中时使用OutputStream类,此文章以对象为基本单位输入输出(这就需要使用增强类ObjectOutputStream)。

1、首先使用OutputStream的子类FileOutputStream实例化一个对象fos

2、接着使用增强类ObjectOutputStream实例化一个对象oos(ObjectOutputStream类必须要fos作为参数传入)

3、使用增强类ObjectOutputStream实例化的对象oos调用方法 writeObject(obj)进行写入(输出)对象数据

4、关闭流通道close()

代码演示:

public void WriteObj(Student stu) {//写输出对象函数,参数是学生对象 
     FileOutputStream fos = new FileOutputStream(path, true);//指定输出流的目的地路径path,true代表不会刷新原文件只是从末尾继续写入数据
     ObjectOutputStream oos = new ObjectOutputStream(fos);//因为FileOutputStream功能不强不能直接对一个对象写。所以使用ObjectOutputStream类创建一个对象调用其写对象的方法来加强。但是真正写入的功能还是FileOutputStream来完成的
     oos.writeObject(stu);//输出,写入对象数据到文件
     fos.close();//关闭流
}

 

三、读取(输入)文本InputStream

当我们需要把数据从磁盘某文件文本中读出时使用InputStream类,此文章以对象为基本单位输入输出(这就需要使用增强类ObjectInputStream)。

 public List<Student> ReadAllObj() {//返回类型为List,输入读取对象函数
        List<Student> lstStus = new ArrayList<Student>();//List接口对象lstStus,把ArryList类创建的对象赋值给接口对象 
        Student stu = null;//声明一个学生对象,还未创建
        FileInputStream fis = new FileInputStream(path);//创建字节输入流读取对象,并指定目标路径path
        ObjectInputStream ois;//ObjectInputStream增强功能
        while (fis.available() > 0) {//判断文件是否已经读到最后一个
                ois = new ObjectInputStream(fis);//创建增强版读取输入流对象ois,下面使用该对象的增强版函数可读取整个对象
                stu = (Student) ois.readObject();//直接调用readObject函数,一读取读整个对象出来
                lstStus.add(stu);//读取到的对象存放到数组对象lstStus    
        } 
        fis.close();
        return lstStus;
    }

 

四、优化整合FileHelper

package DB;

import core.Student;
import java.util.List;
import java.io.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FileHelper {

    final String path = "E:\\OTHER\\JAVA\\obj.data";//文本的路径

    public void WriteObj(Student stu) {//写 输出对象函数,参数是学生对象
        FileOutputStream fos = null;//定义一个字节输出流对象
        try {
            fos = new FileOutputStream(path, true);//指定输出流的目的地路径,true代表不会刷新原文件只是从末尾继续写入数据
            ObjectOutputStream oos = new ObjectOutputStream(fos);//因为FileOutputStream功能不强不能直接对一个对象写
            //所以使用ObjectOutputStream类创建一个对象调用其写对象的方法来加强。但是真正写入的功能还是FileOutputStream来完成的
            oos.writeObject(stu);//输出,写入对象数据到文件
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                fos.close();
            } catch (IOException ex) {
                Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public List<Student> ReadAllObj() {//返回类型为List,输入 读取对象函数
        List<Student> lstStus = new ArrayList<Student>();//List接口对象lstStus,把ArryList类创建的对象赋值给接口对象
        try {
            Student stu = null;//声明一个学生对象,还未创建
            FileInputStream fis = new FileInputStream(path);//创建字节输入流读取对象,并指定目标路径path
            ObjectInputStream ois;//ObjectInputStream增强功能
            while (fis.available() > 0) {//判断文件是否已经读到最后一个
                ois = new ObjectInputStream(fis);//创建增强版读取输入流对象ois,下面使用该对象的增强版函数可读取整个对象
                stu = (Student) ois.readObject();//直接调用readObject函数,一读取读整个对象出来
                lstStus.add(stu);//读取到的对象存放到数组对象lstStus
            }
            fis.close();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(FileHelper.class.getName()).log(Level.SEVERE, null, ex);
        }
        return lstStus;
    }

}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值