# javaSE阶段综合练习 已知用户类结构如下: ```java class User{ private String username; private String password; // 省略有参构造方法、无参构造方法、getter方法、setter方法、toString方法 } ``` 已知**用户服务``UserService``**接口如下: ```java public interface UserService { /** * 用户注册 * @param user */ void register(User user); /** * 用户登录 * @param username * @param password * @return 登录结果 */ String login(String username,String password); } ``` # 一、用户注册 案例描述: > 创建``UserService``接口的实现类``UserServiceImpl``,重写``register()``方法,要求在方法中实现用户注册功能。 案例需求: > ``register(User user)``方法内需要实现以下操作: > > 1. 创建以user对象中username属性值为文件名的``.properties``文件。比如: > - ``user.getUsername()``的返回值为``zhangsan``,则创建名为``zhangsan.properties``的文件 > 2. 在已创建的``.properties``文件中写入user对象的password属性值。比如: > - ``user.getPassword()``的返回值为``123456``,则在文件中写入``password=123456`` > 3. 要求验证user对象的username值的唯一性,如果传入的user对象的username重复了,则抛出``UsernameDuplicateException``异常,该异常需要自定义。 实现步骤分析: - 当调用``register(User user)``方法传入``user``对象后,在方法中首先要验证user对象的用户名``username``是否重复,比如``username=zhangsan``。也就是查询是否具有``zhangsan.properties``文件,如果有,则直接抛出``UsernameDuplicateException``异常。 - 如果没有重复,则创建文件名为``zhangsan.properties``的文件。 - 获取``user``对象的``password``属性值,比如``password``属性值为``zs123456``。将``password=``和``zs123456``进行字符串拼接。比如:``password=zs123456``。 - 拼接完成后,使用文件输出流将拼接好的字符串输出到``zhangsan.properties``文件中。 - 释放资源,关闭流。 # 二、用户登录 案例描述: > 创建``UserService``接口的实现类``UserServiceImpl``,重写``login()``方法,要求在方法中实现用户登录功能。 案例需求: > ``login(String username,String password)``方法内需要实现以下操作: > > 1. 搜索文件名为username实际参数的文件是否存在。比如: > - username为``zhangsan``,则搜索``zhangsan.properties``文件是否存在。 > 2. 不存在,则返回结果:"用户名不正确,请重新输入",存在,则验证该文件中的password的值是否和传入方法的实参password一致。如果一致,则返回结果:"登录成功",否则返回结果"密码错误,登录失败"。 > 3. 要求使用Properties集合来获取文件中的password属性值。 实现步骤分析: - 当调用``login(String username,String password)``方法传入user对象后,在方法中首先要验证user对象的用户名``username``是否存在,比如``username=zhangsan``。也就是查询是否具有``zhangsan.properties``文件,没有则直接返回结果:``"用户名不正确,请重新输入"``。 - 如果有该文件,则通过Properties对象的``load()``方法获取``password``属性的值。 - 然后将获取到的密码,和传入方法的密码实参进行比较,如果相同则返回结果:``"登录成功"``。否则返回:``"密码错误,登录失败"``。 - 释放资源,关闭流。