之前搜过好多写电话簿都挺复杂的,也希望自己的代码能帮助到向我之前那样努力找简单点代码的人。
先建一个entity包,写一个Books类:
package entity;
public class Books {
private String name;
private String num;
public Books(String name,String num) {
super();
this.name = name;
this.num = num;
}
public String getName() {
return name;
}
public String getNum() {
return num;
}
public void setName(String name) {
this.name = name;
}
public void setNum(String num) {
this.num = num;
}
public String showBook() {
return "\t 姓名:"+name+"\t 电话号码:"+num;
}
}
在写一个PhoneOperator类:
package entity;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import javax.swing.InputMap;
- PhoneOperator类
public class PhoneOperator {
List<Books> booklist = new ArrayList<Books>(); //<>是泛型的标志,利用ArrayList类实例化List集合
Scanner sc = new Scanner(System.in);
boolean status = true;
private String tname;
private String tnum;
- main方法
public static void main(String[] args) throws IOException {
PhoneOperator phone = new PhoneOperator(); //定义一个PhoneOperator的对象phone
File file = new File("d:/phoneBook.txt"); //定义一个文件,括号内的是路径
if(!file.exists()) {
//若文件不存在则新建一个文件
file.createNewFile(); //建新一个文件
}else {
//若文件存在则读取文件内容
phone.readBooks();
}
phone.operator();
}
- operator
public void operator() throws IOException {
// TODO Auto-generated method stub
while(status) {
System.out.println("----------电话本----------");
System.out.println("\t 1.新增 \t 2.删除 \t 3.更新 \t 4.查询所有 \t 5.保存 \t 0.退出");
System.out.println("----------电话本----------");
System.out.println("请输入一个数字选择相应功能:");
String selected = sc.next();
switch(selected) {
case "1":
//新增
addBook();
break;
case "2":
//删除
delete();//从list中删除
break;
case "3":
//更新
update();
break;
case "4":
//查询所有
findAll();
break;
case "5":
saveBook();
break;
case "0":
//退出
sc.close();
status = false;
break;
}
}
}
- update方法
private void update() throws IOException {
// TODO Auto-generated method stub
System.out.println("请输入要修改的账户姓名:");
String unam = sc.next();
System.out.println("输入修改后的号码:");
String unum = sc.next();
for(Books book:booklist) {
if(book.getName().equals(unam)) {
book.setNum(unum);
System.out.println("修改成功!");
}
}
}
- delete方法
private void delete() {
System.out.println("请输入要删除的联系人姓名:");
String dname = sc.next();
for(int i =0;i<booklist.size();i++) {
Books book = booklist.get(i);
if(book.getName().equals(dname)) {
booklist.remove(book);
System.out.println("删除成功!");
}else {
continue;
}
}
}
- .findAll方法
private void findAll() {
// TODO Auto-generated method stub
for(Books book:booklist) {
System.out.println(book.showBook());
}
}
- addBook方法
private void addBook() {
// TODO Auto-generated method stub
System.out.println("请输入姓名:");
tname = sc.next();
System.out.println("请输入电话号码:");
tnum = sc.next();
Books book = new Books(tname,tnum);
booklist.add(book);
System.out.println(book.showBook());
System.out.println("新增成功!");
}
- readBooks方法
public void readBooks() {
// 读取文件信息
FileInputStream filein; //文件字节输入流
try {
filein = new FileInputStream("d:/phoneBook.txt"); //根据路径创建FileInputStream类对象。
if(filein.available()==0) {
System.out.println("电话本内容为空,即将加载主页面..........");
}else {
BufferedReader br = new BufferedReader(new InputStreamReader(filein)); //InputStreamReader是个字符流和字节流之间的转换中介,BufferedReader是个字符流,filein是一个文件字节流
String line = null;
Books book = null;
while((line=br.readLine()) != null) {
String[] str = line.split(",");//line.split(); //切割字符串。
book = new Books(str[0],str[1]);
booklist.add(book);
book = null;
}
filein.close();//关闭字节输入流
br.close();//关闭存入缓冲
System.out.println("电话本已加载,可进行数据操作......");
}
} catch (FileNotFoundException e) {
e.printStackTrace(); //e.printStackTrace();是打印异常的堆栈信息,指明错误原因。
} catch (IOException e) { //是Exception的子类,IOException是输入或输出异常(即写读异常)。
e.printStackTrace();
}
}
- savaBook方法
private void saveBook() {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("d:/phoneBook.txt"));
//可以一行行的输出
for(Books book:booklist) {
bw.write(book.getName()+","+book.getNum());
bw.write("\r\n");
}
bw.flush(); //清空缓存区
System.out.println("保存成功");
bw.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}