java学习笔记(9)-Java I/O系统

第九章 Java I/O系统

1、题目

1.1、 何为流?根据流的方向,流可分为哪两种?

流表示文件传播的方向和传播的文件信息的集合。根据流的方向,流可分为输入与输出流。
PPT:流是在计算机的输入、输出操作中流动的数据序列。

1.2、 InputStream,OutputStream,Reader和Writer类的功能有何异同?

其中InputStream与Reader同为输入流,程序可以通过它们从文件读取信息;而OutputStream与Writer同为输出流,程序可以通过它们向文件输出信息。
PPT:
这里写图片描述
字节流类主要用于读写诸如图象或声音等的二进制数据。字符流类用于向字符流读写16位二进制字符。

1.3、 编写一个程序,将两个文件中的内容合并到一个文件中。

(这里只实现了从1和2文件读取输出到3文件,还不能从1复制到2而不改变2原有的值)

package xiti9;
//以字节流方式,将一个文件中的信息复制到另一个文件
//读入:程序<-FileInputStream<-文件(信息源)
//写出:程序->FileOutputStream->文件(信息去向)
//未考虑异常处理

import java.io.*;
public class xiti9_3 {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
      int b = 0;
      FileInputStream in1 = null,in2 = null;
      FileOutputStream out = null;

      //数据源,用于向程序中读取信息
      in1 = new FileInputStream("e://source1.txt");
      //目标文件,程序将信息写到此文件中,会自动创建文件
      in2 = new FileInputStream("e://source2.txt");
      out = new FileOutputStream("e://dest.txt");
      while((b=in1.read())!=-1){//一次读一个字节,判断是否读到文件结尾
          out.write(b);//一次写一个字节
      }
      while((b=in2.read())!=-1){//一次读一个字节,判断是否读到文件结尾
          out.write(b);//一次写一个字节
      }
      in1.close();
      in2.close();
      out.close();

      System.out.println("文件已复制");
}
}

这里写图片描述

1.4、 编程实现以下功能

在屏幕上显示:输入姓名,然后将用户输入的姓名保存到文本文件中,重复进行,直到用户输入空字符串为止。 

package xiti9;
import java.io.*;
public class xiti9_4 {
public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
    //使用System.in创建InputStreamReader类对象iin
    InputStreamReader iin = new InputStreamReader(System.in);
    //创建BufferedReader类对象bin,并关联到iin
    BufferedReader bin = new BufferedReader(iin);

    //或者合并写成如下
    //BufferedReader stdin= new BufferedReader( new InputStreamReader(System.in));
    String str;
    //System.out.println("请输入姓名:");
    //str = bin.readLine();


    //创建文件输出 FileWriter类对象fw1
    FileWriter fw = new FileWriter("e:\\name.txt");

    //创建带缓冲的BufferedWriter类对象bw,并关联到fw1
    BufferedWriter bw = new BufferedWriter(fw);   
  //循环读入字符串
    while(true){

        System.out.println("请输入姓名: ");
        //清空输出缓冲区
        System.out.flush();

        //读入输入的一行
        str = bin.readLine();

        //若遇到空行则break,结束读-写工作
        if(str.length()==0)break;

        //将本行字符串写出到对象bw
        bw.write(str);

        //在对象bw中创建新行,为下一行输出做准备
        bw.newLine();           
    }
    //关闭输出对象
    bin.close();
    bw.close();

}
}

这里写图片描述

1.5、 使用 字符流 编程实现以下功能

(1)从键盘输入姓名、学号、成绩,并保存到文本文件中,重复进行,直到输入空字符串为止
(2)从文件中读取各学生的成绩,并计算所有学生成绩的平均值、最大值和最小值

package xiti9;
import java.io.*;
public class xiti9_5 {
public static void main(String[] args) throws Exception{
    InputStreamReader iin = new InputStreamReader(System.in);
    BufferedReader bin = new BufferedReader(iin);
    String str;  
    FileWriter fw = new FileWriter("e:\\student.txt");        
    //创建带缓冲的BufferedWriter类对象bw,并关联到fw1
    BufferedWriter bw = new BufferedWriter(fw);               

  //循环读入字符串
    while(true){        
        System.out.println("请输入姓名、学号: ");
        //清空输出缓冲区
        System.out.flush();          
        //读入输入的一行
        str = bin.readLine();            
        //若遇到空行则break,结束读-写工作
        if(str.length()==0)break;            
        //将本行字符串写出到对象bw
        bw.write(str);            
        //在对象bw中创建新行,为下一行输出做准备
        bw.newLine();  
        System.out.println("请输入成绩: ");//为了方便提取成绩信息,将其单独作为一行写入文件
        System.out.flush();
        str = bin.readLine();
        if(str.length()==0)break;
        bw.write(str);
        bw.newLine();  
    }
    //关闭输出对象
    bin.close();
    bw.close();
    System.out.println("姓名、学号、成绩已保存到文本");
    

    //对student.txt文件的操作   
    FileReader fr = new FileReader("e:\\student.txt");
    BufferedReader bin1 = new BufferedReader(fr);
  //建立缓冲BufferedReader对象bin1,关联到fr

    String str2;  
    str2=bin1.readLine(); 
    double temp=0,ave=0,min=1000,sum=0,max=0;
    int linenum=0;//以行数的奇偶判断成绩所在的行
    while(str2!=null) {
        linenum++;
        if(linenum%2==0) {//偶数行为成绩
            temp = Double.parseDouble(str2);
            sum+=temp;//求和
            if(min>temp) {
                min=temp;
            }
            if(max<temp) {
                max=temp;
            }
        }
        str2=bin1.readLine();
    }
    ave = sum/(linenum/2);
    System.out.println("学生成绩的平均值为:"+ave);
    System.out.println("学生成绩的最大值为:"+max);
    System.out.println("学生成绩的最小值为:"+min);
}
}

这里写图片描述

2、论述

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李霁明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值