迁徙6_IO流等问题_java_2016-9-4

时间:2021-06-20 21:33:29
   不好意思,时隔一个月零一天才更新。。
    菜鸟最近真的有些吃不消呢,但是求知、求职的路本来就该走的坎坷一些,这样才会印象深刻,才会更有意义一写哈。
一帆风顺的人生会有趣吗?反正我没有一帆风顺过,我没有发言权;但至少读完i哦这个坎坷的人生,我还是心怀感激的。
说点什么呢?这一个月左右的时间,我学了java基础,面向对象(OOP),还有java API 。目前在临近API末端了,菜鸟除了感觉累,另一个感觉就是真的没白来,真的没有白来!
    想想有什么可以记录的呢?
 要求:
1、
 * 使用异常捕获机制完成下述IO操作  * 编写程序,要求下面的类实现功能:  * 添加新员工  * 要求用户输入一个员工信息,格式如下:  * jackson,25,男,5000,2008-12-22  * 用户输入后需要做下述验证:  * 要求用户名长度在1-20个字符之间且必须是英文  * 年龄在0-100之间的整数  * 性别只能是:"男"或"女"  * 当发现用户输入有不符合规定时,提醒用户  * 相关内容输入不符合要求,并要求重新输入。  * 都输入正确后,将该员工添加到emp.txt文件 * 的最后一行。 


2、
 * 使用异常捕获机制完成下述读取操作  * 读取emp.txt文件,并将每个员工信息读取出来,以一个Emp实例保存,然后将  * 这些Emp实例存入到一个Map集合中。其中key为字符串,是该员工名字,而value  * 是该Emp实例。  * 存入后,要求用户输入一个员工的名字,如:张三  * 若该员工存在则输出该员工所有信息(Emp的toString方法返回的字符串)  * 输入的员工名若是英文,不要求区分大小写。  * 若输入的员工名字不存在,则显示"查无此人"

 
Emp.java
public class Emp { private String name; private int age; private String gender; private int salary; private Date hiredate; public Emp(String name, int age, String gender, int salary, Date hiredate) { super(); this.name = name; this.age = age; this.gender = gender; this.salary = salary; this.hiredate = hiredate; } 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 String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public boolean equals(Object obj){ if(obj==null){ return false; } if(obj==this){ return true; } if(obj instanceof Emp){ Emp emp = (Emp)obj; return emp.name.equals(this.name)&&emp.age==this.age&&emp.gender.equals(this.gender)&&emp.salary==this.salary; } return false; } public String toString(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return name+","+age+","+gender+","+salary+","+sdf.format(hiredate); }}
Test1.java
public class Test1 { public static void main(String[] args) { try{ Scanner scanner = new Scanner(System.in); while(true){ System.out.println("请输入员工信息:"); String info = scanner.nextLine(); String[] infos = info.split(","); if(!checkName(infos[0])){ System.out.println("名字只能是1-20位的英文"); continue; } if(!checkGender(infos[2])){ System.out.println("性别只能是:<男/女>"); continue; } String name = infos[0]; int age = Integer.parseInt(infos[1]); String gender = infos[2]; int salary = Integer.parseInt(infos[3]); Date hiredate = parseDate(infos[4]); Emp e = new Emp(name, age, gender, salary, hiredate); saveEmp(e); System.out.println("保存完毕!"); break; } }catch(Exception e){ e.printStackTrace(); } } public static void saveEmp(Emp e)throws IOException, URISyntaxException{ PrintWriter pw = null; try{ File file = new File("src/main/java/day08/emp.txt"); System.out.println(file.getAbsolutePath()); pw = new PrintWriter( new OutputStreamWriter( new FileOutputStream(file,true) ) ); pw.println(e); }finally{ if(pw!=null){ pw.close(); } } } public static Date parseDate(String line) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(line); } public static boolean checkGender(String gender){ String genderRegex = "[男女]"; return gender.matches(genderRegex); } public static boolean checkName(String name){ String nameRegex = "[a-zA-Z]{1,20}"; return name.matches(nameRegex); }

Test2.java
public class Test04 { public static void main(String[] args) { BufferedReader br = null; try { Map<String,Emp> map = new HashMap<String,Emp>(); br = new BufferedReader( new InputStreamReader( Test04.class.getClassLoader().getResourceAsStream("day08/emp.txt") ) ); String line = null; //读取文件每一行并解析为一个Emp对象存入Map集合 while((line = br.readLine())!=null){ Emp emp = parseEmp(line); map.put(emp.getName().toLowerCase(), emp); } Scanner scanner = new Scanner(System.in); System.out.println("请输入员工姓名:"); String name = scanner.nextLine().toLowerCase(); if(map.containsKey(name)){ Emp e = map.get(name); System.out.println(e); }else{ System.out.println("查无此人"); } } catch (Exception e) { e.printStackTrace(); } finally{ if(br != null){ try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static Emp parseEmp(String info) throws ParseException{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String[] infos = info.split(","); String name = infos[0]; int age = Integer.parseInt(infos[1]); String gender = infos[2]; int salary = Integer.parseInt(infos[3]); Date hiredate = sdf.parse(infos[4]); Emp emp = new Emp(name, age, gender, salary, hiredate); return emp; } }


以上代码不是我所写的,但是我的大致思路也就是这样的,个别有出入,我写的代码不在电脑中,等有空再修改。
之所以选择这道题目,因为觉得这两个还是比较有代表性的,值得记录 。
明天又是新的礼拜了,希望自己继续努力,再创佳绩。