涉及: list的使用和遍历
文件的读
循环控制语句的使用
文件操作类:FileOperation
package file;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 文件相关操作
* @author Hello_Kitty
*/
public class FileOperation {
String path = ".\\file\\file.txt";//文件路径
File cf = new File(path);
//创建文件
public boolean doCreate() {
// 判断文件是否存在
if (cf.exists()) {
// 如果存在
// System.out.println("文件已存在");
return false;
} else {
// 如果不存在,创建文件并捕获异常
try {
cf.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
// System.out.println("文件创建完成");
return true;
}
}
//写入,写入之前应该先检查文件是否存在,FileWriter()方法控制可否追加
public boolean doWrite(String str) throws IOException{
doCreate();
// 在给出 File 对象的情况下构造一个 FileWriter 对象
FileWriter fw = new FileWriter(cf,true);//FileWriter为true才能追加
BufferedWriter bw = new BufferedWriter(fw);
//写入数据后换行,不可用write,追加用appand
// bw.write(str+"\n");//写入字符串,在后面readLine会碰到\n,\r,\r\n后停止读取
bw.append(str);//需要将FileWriter设置为true
bw.newLine();//换行
bw.flush();//输出储存在内存中全部的内容,将内存中的数据写入文件
bw.close();//关闭资源
// System.out.println("数据写入成功");
return true;
}
//读取文件内容
public List<String> doRead() throws IOException{
List<String> list = new ArrayList<String>();
FileReader fr = new FileReader(cf);
BufferedReader br = new BufferedReader(fr);
/*错误示范,读取了两次str存入的是第二次读取的
while(br.readLine()!=null){//不为空继续读
String str = br.readLine();*/
boolean flag = true;//用来控制while循环
while(flag){
String str = br.readLine();
if(str!=null){
list.add(str);
}else{
flag = false;
br.close();
// System.out.println(flag);
}
}
return list;
}
// //删除
public void doDelte(int id) throws IOException{
int i = -1;//用来表示删除元素在list中的下标
// List<String> list = new ArrayList<String>();
List<String> list = doRead();//doRead()返回值存入list
//遍历list,匹配到需要删除的信息则调用remove
Iterator<String> it = list.iterator();
boolean flag = true;//用来控制输出提示语句,避免在循环中多次输出
while (it.hasNext()) {
++i;
String str = it.next();
String[] str2 = str.split(",");
if((Integer.parseInt(str2[0])==(id))){
list.remove(i);//remove之后遍历的list发生改变,必须终止循环
System.out.println(list);
//删除txt内容重新写入,写入一个空格或者直接删除
new File(path).delete();
for(int j = 0;j<list.size();j++){
doWrite(list.get(j));
}
break;
}else{
// System.out.println("查找不到匹配的学号");
flag = false;
}
}
System.out.println(flag?"信息删除成功":"查找不到匹配的学号");
}
//文件数据加密
public void encrypt(){
}
}
学生操作类:StuOperation.java
package file;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
//对学生的操作
public class StuOperation {
FileOperation fo = new FileOperation();
Student stu;
//写入学生信息到txt
public void stuWrite() throws IOException {
// 判断学号是否存在,保证学号的唯一性
Scanner sc = new Scanner(System.in);// 只需要一次
boolean flag = true;
while (flag) {
System.out.println("请根据提示输入学生信息:" + "\n" + "请输入学生学号(0~100): ");
int id = sc.nextInt();
// 不能使用stuRead().getId(),stuRead().getId()为最后一个学生id
// System.out.println(">>>>>>>>>>>"+stuRead().getId());
// if (id == stuRead().getId()) {
// 获取学生id
List<String> list = fo.doRead();
Iterator<String> it = list.iterator();
while (it.hasNext()) {
//取首字并强转为int
int iid = Integer.parseInt(it.next().substring(0, 1));
if (id == iid) {
flag = true;
break;
} else {
flag = false;
}
}
if (!flag) {
System.out.println("请输入学生姓名: ");
String name = sc.next();
System.out.println("请输入学生年龄: ");
int age = sc.nextInt();
System.out.println("请输入学生性别(true:男,false:女): ");
boolean sex = sc.nextBoolean();
System.out.println("请输入学生联系电话: ");
String phoneNum = sc.next();
System.out.println("请输入学生联系地址: ");
String address = sc.next();
sc.close();
Student stu2 = new Student(id, name, age, sex, phoneNum, address);
String str = stu2.ts();// 调用ts()调整数据格式存入str
System.out.println(str);
// fo.doWrite(str);//在输出语句中调用一次,这里不用再调,否则重复
System.out.println(fo.doWrite(str) ? "内容写入完成" : "写入失败");
break;
} else {
System.out.println("输入的学号已存在,请重新输入");
}
}
}
//读取数据
public Student stuRead() throws IOException{
String str[];//用来存放遍历list后拆分的数据
int i = 0; //定义在迭代器里面每次循环都会使i=0
List<String> list = fo.doRead();
System.out.println("txt中的内容为: "+list);
//遍历list
Iterator<String> it = list.iterator();
while (it.hasNext()) {
i = i + 1;
String str2 = it.next();
str = str2.split(",");
// System.out.println("str: "+Arrays.toString(str));//调用Arrays类的toString(),输出内容
//强制类型装换
stu = new Student(Integer.parseInt(str[0]),str[1],Integer.parseInt(str[2])
,Boolean.getBoolean(str[3]),str[4],str[5]);
System.out.println("第 "+ i +" 个学生: "+stu.toString());
}
return stu;
}
//输入学号删除学生信息
public void stuDetele() throws IOException{
System.out.println("请输入需要删除的学生的学号:");
Scanner sc = new Scanner(System.in);
int id = sc.nextInt();
sc.close();
fo.doDelte(id);
}
}
测试类:Test.java
package file;
import java.io.IOException;
import java.util.Scanner;
public class Test {
public static void main(String[]args) throws IOException{
StuOperation so = new StuOperation();
Scanner sc = new Scanner(System.in);
sc.close();
System.out.println("输入");
int a = sc.nextInt();
switch(a){
case 1:so.stuWrite();break;
case 2:so.stuRead();break;
case 3:so.stuDetele();break;//根据学号
}
}
}
封装学生类:Student.java
package file;
//学生类
public class Student {
private int id;//学号
private String name;// 姓名
private int age;// 年龄
private boolean sex;// 性别,true表示男,flase表示女,利用三目运算符输出男或女 sex?男:女
private String phoneNum;// 联系电话
private String adress;// 联系地址
public Student() {
super();
}
public Student(int id ,String name, int age, boolean sex, String phoneNum, String adress) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.phoneNum = phoneNum;
this.adress = adress;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@Override
public String toString() {
return "学号: " + id + " 姓名: " + name + " \t年龄: " + age + " \t性别: " + (sex?"男":"女")
+ " \t联系电话: " + phoneNum + " \t联系地址: " + adress;
}
//ts()用来调整数据格式方便存入txt
public String ts() {
return id +","+ name +","+ age +","+ (sex?"男":"女") +","+ phoneNum +","+ adress;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)