IO流学习笔记总结及有关练习

本文深入解析Java中InputStream、OutputStream、Reader和Writer四大顶级抽象类及其子类的使用,包括FileInputStream、FileOutputStream、BufferedReader等。并通过具体实例演示如何利用这些流计算成绩表中学生的平均成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、四个顶级抽象类

       1 InputStream

              1.1常用子类

              FileInputStream 文件输入字节流

              ObjectInputStream 对象输入流

              ByteArrayInputStream字节数组输入流

              1.2 带缓冲的流

              BufferedInputStream

              用法:

BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(sourcePath));

       2 OutputStream

             2.1 常用子类

               FileOutputStream 文件输出流

               ObjectOutputStream 对象输出流

               ByteArrayOutputStream 字节数组输出流

             2.2 带缓冲的流

               BufferedOutputStream

               用法:

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(target),1024*1024);

       3 Reader

              3.1 常见子类

               BufferedReader

               InputStreamReader

               StringReader

             3.2 固定用法

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(sourcePath), "utf-8"));

       4 Writer

            4.1 常见子类

              BufferedWriter

              CharArrayWriter

              OutputStreamWriter

              PrintWriter

              StringWriter

           4.2 用法二选一

PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(target,true),"utf-8"));

    Or

BufferedWriter printWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target,true),"utf-8"));

二、有关练习(计算成绩表中每个人的平均成绩)

 2.1 新建一个成绩表grade.txt

62971c3b20fe07b5181bf1ac394b86bfcf4.jpg

2.2 通过文件流读取文件数据

package FileStore;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 * @Auther: Administrator
 * @Date: 2019/3/4
 * @Description: 计算平均成绩测试类
 * @version: 1.0
 */
public class Grade {
    public static void main(String[] args) {
        String  source = "C:\\Users\\num11\\Desktop\\grade.txt";
        try {
            readFile(source);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**读取文件内容
     * @param source
     */
    public  static void  readFile(String  source) throws Exception{
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(source),"gbk"));
        String  line = bufferedReader.readLine();//除去第一行
        while ((line = bufferedReader.readLine())!=null){
            //处理每行的数据,并封装成对象
            Student student = doLine(line);
            System.out.println(student.getSname()+"的平均成绩是:"+student.avgGrade());
        }
        if(bufferedReader!= null){
            bufferedReader.close();
        }
    }
    public static Student  doLine(String line){
        String[] strs = line.split("\\s+");
        //简单的封装对象
        Student student = new Student();
        student.setSno(strs[0]);
        student.setSname(strs[1]);
        student.setYuwen(Integer.valueOf(strs[2]));
        student.setShuxue(Integer.valueOf(strs[3]));
        student.setEnglish(Integer.valueOf(strs[4]));
        return student;
    }

}

Student对象

package FileStore;

/**
 * @Auther: Administrator
 * @Date: 2019/3/4
 * @Description: FileStore
 * @version: 1.0
 */
public class Student {
    private  String  sno;
    private  String sname;
    private  int  yuwen;
    private  int  shuxue;
    private  int  english;

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public int getYuwen() {
        return yuwen;
    }

    public void setYuwen(int yuwen) {
        this.yuwen = yuwen;
    }

    public int getShuxue() {
        return shuxue;
    }

    public void setShuxue(int shuxue) {
        this.shuxue = shuxue;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }


    public int avgGrade(){
        return (this.yuwen+this.shuxue+this.english)/3;
    }
}

 

转载于:https://my.oschina.net/chenzhou/blog/3017684

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值