我觉得最重要的就是这个readFile函数了
package File;
import java.util.StringTokenizer;
import java.io.*;
public class ReadFile
{
public Student[] readFile(String fileName)
{
String firstLine;
String message;
int lineNumber=0;
try
{
FileReader in=new FileReader(fileName);
LineNumberReader lnr=new LineNumberReader(in);
while(lnr.readLine()!=null)
{
lineNumber++;
}
lnr.close();
}catch(IOException ioe) {System.out.println("输入输出错误!");}
Student stu[]=new Student[lineNumber-1];
RandomAccessFile inAndOut=null;
try
{
inAndOut=new RandomAccessFile(fileName,"rw");
firstLine=inAndOut.readLine();
byte a[]=firstLine.getBytes("iso-8859-1");
firstLine=new String(a);
long length=inAndOut.length();
long position=inAndOut.getFilePointer();
int num=0;
while(position<length)
{
if(firstLine.contains("导师"))
{
message=inAndOut.readLine();
byte b[]=message.getBytes("iso-8859-1");
message=new String(b);
position=inAndOut.getFilePointer();
StringTokenizer fenxi=new StringTokenizer(message);
int id=Integer.parseInt(fenxi.nextToken());
String name=fenxi.nextToken();
int mathScore=Integer.parseInt(fenxi.nextToken());;
int computerScore=Integer.parseInt(fenxi.nextToken());;
String tutor=fenxi.nextToken();
String area=fenxi.nextToken();
stu[num]=new Postgraduate(id,name,mathScore,computerScore,tutor,area);
num++;
}
else
{
message=inAndOut.readLine();
byte b[]=message.getBytes("iso-8859-1");
message=new String(b);
position=inAndOut.getFilePointer();
StringTokenizer fenxi=new StringTokenizer(message);
int id=Integer.parseInt(fenxi.nextToken());
String name=fenxi.nextToken();
int mathScore=Integer.parseInt(fenxi.nextToken());
int computerScore=Integer.parseInt(fenxi.nextToken());
stu[num]=new Undergraduate(id,name,mathScore,computerScore);
num++;
}
}
inAndOut.close();
}catch(IOException ioe) {System.out.println("第二个输入输出错误!");}
return stu;
}
}
j
1.引用StringTokenizer类的时候,要import java.util.StringTokenizer类,用的时候要StringTokenizer fenxi=new StringTokenizer(message);
新建一个分析器对象,括号里是被分隔开的字符串,默认是各种空格的组合、换行符、回车符、tab键,要是自己又想法,就在string后边自己加。
这个读出来的是字符串,要变成int要用Integer.ParseInt()函数自己转化
2.try
{
}
catch(IOException){System.out.println("输入输出错误!");}
3.读取行数:LIneNumberReader类有个readLine函数,可以直接读取行数,但参数一定要是FileReader
4.空指针错误在java中我总是会出现,原因就是输出print函数循环的次数多了,数组没有那么大,回去找数组定义,数量是不是定义大了
5.这个把文件读进来之后怎么判断本科生还是研究生这个是找老师问的,第一种方法是判断读入的第一行里有没有“导师”这个词,第二种方法是判断第一行的数量,我咋就没想到呢。
6.注意转码写法