实验六 (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;
}
}