头歌 实验六 java输入输出

第1关:从文件读取一篇英语文章,然后统计26个英文字母出现的次数

任务描述

本关任务:从文件读取一篇英语文章,然后统计26个英文字母出现的次数。

要求
  1. 按26个字母的顺序统计出每个字母出现的次数。
  2. 用于统计次数的类FileLetter,只有一个方法: public int[] LetterStatistics(String strFilename); strFilename是输入的需统计的文件名; 返回的是一个整型数组,大小26,每个位置存放的分别是a到z出现的次数。大小写字母算同一个字母。
代码
package step1;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
//在此写FileLetter类

public class FileLetter {
    
    private FileInputStream read;
    
    public int[] LetterStatistics(String strFilename){
        try{
            read=new FileInputStream(strFilename);
            int[] letter=new int[26];
            int b=read.read();
            char a='a';char A='A';
            while(b!=-1) {
                if(b-(int)a>=0&&b-(int)a<26) {
                    letter[b-(int)a]++;
                }
                else if(b-(int)A>=0&&b-(int)A<26) {
                    letter[b-(int)A]++;
                }
                b=read.read();
            }
            read.close();
            return letter;
        }catch(IOException ioe) {
            ioe.printStackTrace();
            return null;
        }    
    }
}

第2关:文件的随机访问

任务描述

本关任务:创建一个学生类Student,包括姓名name,年龄age两个属性。姓名的长度不超过10个字符,年龄是int类型。使用随机读写类RandomAccessFile将学生信息写入到文件中,并能对文件中的学生信息进行读取和修改。(参照教科书P196,例6-18)。

要求

学生类的类名为:Student,该类中有两个属性,访问类型都为public:

char name[]=new char[10]; //学生姓名

int age;//年龄

public Student(String name,int age)构造函数

public void Print();显示姓名和年龄

``

还须创建一个读写类RWClass,该类有一个属性filename,打开读写的文件名。 public RWClass(String filename) 该类的构造函数 public void saveStudent(Student ss,int pos) 将学生对象的信息保存在文件中,ss为保存的学生信息,pos保存的位置。 public Student readStudent(int pos) 在文件中读出某位置的一个学生的信息,返回学生对象

代码

Student.java

package step2;
//在此写Student类
public class Student {
    char name[]= {'\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000','\u0000'};
    int age;
    public Student(String name,int age) throws Exception {
        if(name.toCharArray().length>10) {
            System.arraycopy(name.toCharArray(), 0, this.name, 0, 10);
        }else {
            System.arraycopy(name.toCharArray(), 0, this.name, 0, name.toCharArray().length);
        }
        this.age=age;
    }
    public void print() {
        System.out.println("name:"+name.toString());
        System.out.println("age:"+age);
    }
}

RWClass.java

package step2;
import java.io.*;
//在此写RWClass类
public class RWClass {

    String filename;
    public RWClass(String Filename) {
        filename=Filename;
    }
    public void saveStudent(Student ss,int pos) throws Exception{
        RandomAccessFile ra=new RandomAccessFile(filename,"rw");
        ra.seek(pos*24);
        for(int i=0;i<10;i++) {
            ra.writeChar(ss.name[pos]);
        }
        ra.writeInt(ss.age);
        ra.close();
    }
    public Student readStudent(int pos) throws Exception{
        char buf[]=new char[10];
        RandomAccessFile ra=new RandomAccessFile(filename,"r");
        ra.seek(pos*24);
        for(int i=0;i<10;i++) {
            buf[i]=ra.readChar();
        }
        Student ss=new Student(buf.toString(),ra.readInt());
        ra.close();
        return ss;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值