第1关:从文件读取一篇英语文章,然后统计26个英文字母出现的次数
任务描述
本关任务:从文件读取一篇英语文章,然后统计26个英文字母出现的次数。
要求
- 按26个字母的顺序统计出每个字母出现的次数。
- 用于统计次数的类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;
}
}