头歌实验平台Java实验六

实验六 (Java)输入输出

第1关:从文件读取一篇英语文章,然后统计26个英文字

任务描述

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

要求:

按26个字母的顺序统计出每个字母出现的次数。

用于统计次数的类FileLetter,只有一个方法:
public int[] LetterStatistics(String strFilename);
strFilename是输入的需统计的文件名;
返回的是一个整型数组,大小26,每个位置存放的分别是a到z出现的次数。

大小写字母算同一个字母。

FileLetter.java

package step1;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.io.*;
//在此写FileLetter类
public class FileLetter
{
    public int[] LetterStatistics(String strFilename)
    {
        try
        {
            int[] a = new int[26];
            File file = new File(strFilename);
            FileInputStream f1 = new FileInputStream(strFilename);
            for(int i = 0;i < file.length();i++)
            {
                char ch = (char)f1.read();
                if((ch <= 'z' && ch >= 'a') || (ch <= 'Z' && ch>= 'A'))
                {
                    if(ch<='z' && ch >= 'a')
                    {
                        int index = ch - 'a';
                        a[index]++;
                    }
                    if(ch <= 'Z' && ch >= 'A')
                    {
                        int index = ch -'A';
                        a[index]++;
                    }
                }
            }
            return a;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
        
        
    }

}

第二关 文件的随机访问

任务描述

本关任务:创建一个学生类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 = new char[10];
    int age = 0;

    public Student(){}

    public Student(String name,int age)
    {
        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: " + this.name.toString());
        System.out.println("age: " + this.age);
    }

}

RWClass.java

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

    public RWClass(String filename)
    {
        this.filename = filename;
    }

    public void saveStudent(Student ss,int pos) throws Exception
    {
        RandomAccessFile f1 = new RandomAccessFile(filename,"rw");
        f1.seek(pos * 24);
        for(int i = 0;i< 10;i++)
        {
            f1.writeChar(ss.name[pos]);
        }
        f1.writeInt(ss.age);
        f1.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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只菜鸟呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值