要求
一、实现通讯录类(姓名、性别和电话号码),并为每个属性设置 set和get方法;
二、从通讯录的文本文件“record.txt”中读取数据放到通讯录类实例化的对象中,并合理组织存储结果方便查找。其文件样例如下,文件第一行为通讯录中人员的个数n,从第二行到第n+1行是n个通讯录; 每个通讯录占1行,每行依次为人员姓名、性别和电话号码,每个属性间以空格隔开。
3
张三 男 123456
李四 女 654321
张三 男 654321
三、.从文本文件“query.txt”,查询指定列的数据,样例如下,只有1行,第1个数据是指查询的数据在“record.txt”对应的列数,第二个数据是查询的关键词。
1 张三
四、将查询到的结果输出到“result.txt”文件中,根据前面的“record.txt”和“query.txt”的样例,“result.txt”输出样例如下,注意将查到所有的结果都输出。
张三 男 123456
张三 男 654321
代码实现
1. Addressbook.java
package addressBook;
import java.util.ArrayList;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;
//一、实现通讯录类(姓名、性别和电话号码),并为每个属性设置 set和get方法
public class Addressbook {
public static ArrayList<Person>addressbook = new ArrayList<Person>();
public static int n; //通讯录中人员的个数n
public static void main(String[] args) {
Scanner sin = null;
PrintWriter pw = null;
try {
//二、从通讯录的文本文件“record.txt”中读取数据放到通讯录类实例化的对象中,并合理组织存储结果方便查找。
sin = new Scanner(new FileReader("E:\\study\\homework\\sophomore\\second_semester\\"
+ "java\\addressBook\\src\\addressBook\\record.txt"));
n = sin.nextInt();
sin.nextLine();
System.out.println(n);
Person pr = new Person();
while(sin.hasNextLine()) {
System.out.println("_____________________________________________________________________");
System.out.println("读取了以下信息:");
System.out.println(pr.set(sin.nextLine()));
addressbook.add(pr);
}
sin.close();
//三、.从文本文件“query.txt”,查询指定列的数据,
System.out.println("\n---------------从文本文件“query.txt”,查询指定列的数据---------------");
sin = new Scanner(new FileReader("E:\\study\\homework\\sophomore\\second_semester\\"
+ "java\\addressBook\\src\\addressBook\\query.txt"));
int col = sin.nextInt();
System.out.println("查询的数据在“record.txt”对应的列数: " + col);
String key = sin.next();
System.out.println("查询的关键词: " + key);
sin.close();
//查询
sin = new Scanner(new FileReader("E:\\study\\homework\\sophomore\\second_semester\\"
+ "java\\addressBook\\src\\addressBook\\record.txt"));
sin.nextLine();
pw = new PrintWriter("E:\\study\\homework\\sophomore\\second_semester\\java\\addressBook"
+ "\\src\\addressBook\\result.txt");
while(sin.hasNextLine()) {
// 用临时Person变量pr存储读取的一行数据
pr.set(sin.nextLine());
//四、将查询到的结果输出到“result.txt”文件中,
if(pr.has(col, key)) {
pw.println(pr.get());
System.out.println("写入result.txt了:" + pr.get());
}
}
sin.close();
pw.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
} finally {
if(sin != null) sin.close();
if(pw != null) pw.close();
}
}
}
2. Person.java
package addressBook;
public class Person {
public String name;
public String gender;
public String teleNum;
//为每个属性设置 set和get方法;
public String set(String s) {
String ss[] = s.split("\\s+");
name = ss[0];
gender = ss[1];
teleNum = ss[2];
return (name + ' ' + gender + ' ' + teleNum);
}
public String get() {
return (name + ' ' + gender + ' ' + teleNum);
}
// 查看该关键字是否在当前person的信息中
public boolean has(int col, String key) {
if(col == 1) {
// System.out.println("检查第1列");
// System.out.println(name + " 是否 = " + key);
if(key.equals(name)) {
// System.out.println("**等于**");
return true;
}
} else if(col == 2) {
if(key.equals(gender)) {
return true;
}
} else {
if(key.equals(teleNum)) {
return true;
}
}
return false;
}
}
结果