JAVA学习代码——txt写入学生信息

2023-05-16

涉及: 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(使用前将#替换为@)

JAVA学习代码——txt写入学生信息 的相关文章

  • Python 打印购物小票

    打印购物小票 需求 xff1a 指定折扣输入购买商品单价与数量 顾客交费结算时打印购物小票 xff0c 计算此次购物总金额 xff0c 顾客交费 xff0c 商店找补 xff0c 以及购物积分钱不够时 xff0c 提醒顾客继续交钱只给三次交
  • 创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录...

    yum服务器lvm扩容 xff0c data目录是yum存放rpm包的目录 xff0c 只有20G xff0c 需要添加磁盘扩容到80G df lh Filesystem Size Used Avail Use Mounted on dev
  • 暑假实训的体会与感受_11-java-张玥

    暑假实训的体会与感受 我校为了丰富学生的社会经验 xff0c 暑假制定了实训计划 暑假实训 对我来说是很陌生的 xff0c 到大学以来我第一次接触 xff0c 当时知道这个通知的时候并不是很感兴趣 xff0c 实训完之后才知道真是博大精深啊
  • 这是一个失败的程序员

    写程序至今 xff0c 未入门 xff0c 什么都不懂 xff01
  • 【软,码】完成并发布FLV播放器

    经过一天的努力 xff0c 终于完成了FLV播放器的优化工作 xff0c 并于刚才 xff08 2007年8月5日 9点一刻 xff09 发布成功了 除发布在本站以外 xff0c 在华军也放了一个 暂时命名为 红鱼X的FLV播放器 xff0
  • 【翻】【官方文章】完整的Flash Object参考

    这篇参考翻译自Adobe官方网站提供的技术说明 xff08 点击到官方参考 xff09 并在文末添加了文中未指明的重要信息 内容如下 xff1a 涵盖的内容 xff1a 一 必须的属性 xff1b 二 可选的属性 xff1b 三 活动内容J
  • 【软,码】发布XML/(X)HTML文本化工具

    刚才本来打算把这个工具的代码贴在这里的 xff0c 可是忙活了半天 xff0c 却没有贴成功 xff0c 真让人泄气 来CSDN NET安家是这两天的事情 xff0c 还不是太熟悉它的操作环境 只好再熟悉一下 xff0c 慢慢来了 这是一款
  • 决定总结使用纯C/C++进行Windows编程

    一直以来都很想使用单纯的方式编写Windows应用程序 xff0c 却不可得 xff0c 因为虽然杂七杂八地看了一些Windows API 编程的资料 xff0c 却太零散 xff0c 一到要用的时候就有种大脑裂开的感觉 xff0c 最后只
  • Android 状态栏和导航栏的终极解决方案 最终版

    缘起 我对 Android 的状态栏和导航栏一直有种情结 xff0c 在我做 Android 开发之前 xff0c 我就喜欢通过一些 Xposed 插件来让状态栏和导航栏变色或者透明 xff0c 以消除那丑丑的两个黑条 从 fitsSyst
  • 【软,码】.NET内容协商模块

    为了让我们编写的符合W3C标准的网站精确地服务于客户 xff0c 我们常常需要根据客户使用的浏览器代理类型向客户发送不同的Content Type类型 要做到这一点 xff0c 方案有多种 比较简单的是在页面逻辑中判断客户代理的支持类型 x
  • 我发布的资源列表

    为了方便朋友们查看 xff0c 我特把我发布的所有资源的做成这个列表 您可以从该列表的链接去查看并下载 JS 43 XML X HTML源码 1 红鱼X的FLV 播放器 2007 08 05 2 XML X HTML 文本化工具 2007
  • Java技术世界真是乱!

    从前一直有个心愿 xff0c 就是希望有朝一日彻底放弃 NET xff0c 然后去追随Java 今天想想 xff0c 真不知道我这心愿是不是对的 之所以想离开 NET而转向Java xff0c 原因当然是不甘心于被微软锁死在Windows平
  • 【翻】【英汉对照】【完整官方参考】Windows媒体播放器11 SDK 播放器对象模型(一)

    说明 要看原始参考 xff0c 请到http msdn2 microsoft com en us library aa393405 aspx Windows媒体播放器对象模型 本微软Windows媒体播放器ActiveX控件对象模型提供使开
  • 【翻】【英汉对照】【完整官方参考】Windows媒体播放器11 SDK 播放器对象模型(二)

    说明 要查看原始页面 xff0c 请到http msdn2 microsoft com en us library aa384855 aspx 关于本播放器对象模型 微软Windows媒体播放器控件是一个使用微软COM技术的标准Active
  • 白忙活一场

    前天晚上好不容易挤出时间翻译Windows媒体播放器11 SDK 播放器对象模型 xff08 三 xff09 xff0c 可是翻译了三分之一之后 xff0c 当要以草稿方式保存的时候 xff0c 却始终无法提交到站点上 xff0c 最后刷新
  • 配置并上传FCKEditor.net

    前天使用CSDN翻译文章 xff0c 翻译了一大部分 xff0c 可是最终因为没能上传成功而报废 那时候真的很郁闷 xff01 于是决定在自己的系统上配置和CSDN用的Web编辑器一样的一个FCKEditor系统 xff0c 再写文章的时候
  • 在 ASP.NET 中执行 URL 重写

    发布日期 xff1a 8 23 2004 更新日期 xff1a 8 23 2004 Scott Mitchell 4GuysFromRolla com 适用范围 xff1a Microsoft ASP NET 摘要 xff1a 介绍如何使用
  • 我的近况(随时更新)

    2007年9月23日 最近在开发ASP NET Web服务器 xff0c 因为使用IIS 太受限制了 xff0c 要升级还得升级操作系统 现在的开发阶段为内核开发 xff0c 已经完成基本的开发 xff0c 还没有包装起来
  • adb dumpsys命令用法

    dumpsys命令功能很强大 xff0c 能dump系统服务的各种状态 xff0c 非常有必要熟悉该命令的用法以及含义 一 概述 1 1 dumpsys命令用法 可通过dumpsys命令查询系统服务的运行状态 对象的成员变量属性值 xff0
  • Python if-else使用

    1 从键盘上输 个数 xff0c 显示它的绝对值 不允许使 abs num 61 float input 34 请输入一个实数 xff1a 34 if num gt 0 print num else print num 2 假设 户名为ad

随机推荐