【思路】
//模拟一个网络银行的业务 思考:先做什么?
//设计一个业务方法—-【用来做登录】
package atmsystem;
import java.io.*;
import java.util.HashMap;
public class Test {
public String login(String aname,String apassword){
_/** 怎么读取文件? 创建一个输入流,读取真实文件的记录<br /> * 这里我们用缓冲流BufferedReader来读取一行信息,因为它是字符型的,所以BufferedReader比较好<br />_ * 在构建高级流之前,需要一个低级流的构建来支撑,所以要再来一个FileReader<br /> * 这样我们只要将低级流FileReader作为参数放在缓冲流BufferedReader中<br />_ * 低级流的构建可以用两种方式:1、用字符串来给一个文件路径 2、给一个file<br /> * 那么file的路径写在哪里呢? 我们这个文件是在当前工程里面,所以我们觉得采用相对路径的写法会更好<br /> * 相对路径里面不写盘符,则会到当前工程的根目录里找这个file文件<br />_ * 用readLine方法来读一行,返回值是String类型,value表示一行人的所有信息<br /> * 从代码的严谨性来说,有可能value读取的时候,读到空信息或者读不到信息<br /> * 所以用while循环来逐个判断,用split方法带‘-’作为参数将其拆开来,<br /> * 返回值用String数组来接收,名为user的数组存储着一个人的信息.<br /> * 如果(if)数组的[0]位置和[1]位置与User.txt的file内容一致<br /> * 就登录成功,否则,用户名或密码错误<br /> */<br />_ _User user = userBox.get(aname);<br /> if(user != null && user.getApassword().equals(apassword)){<br /> return "登录成功";<br /> }<br /> return "用户名或密码错误";<br />}
_/*我们发现在使用登录的方法时,每一次调用都需要创建流管道读取文件.
而内存中操作登录的业务文件不在同一个地方,读取的过程很慢,效率不够高.
解决方案:可以创建一个Map集合用来充当缓存,将文件中的数据全部读取出来,并且只读一次.
而Map里,’Key键’存储的是名字,有可能是中文,我们可以用String类型.
‘Value值’存储的是包含名字的所有信息,这里也可以使用String类型的字符串来存储.
‘Value值’也可以使用带String类型的数组[]来存储.甚至可以使用map集合来作为’Value值’.
但是String、String[]、Map都不好,因为String要拆,数组[]的可读性不强.
我们是否可以将【一行记录】作为一个【对象】来存储起来?
也就是说:一个用户就是一个对象,里面的三个属性存储着三个信息值.
而且用对象来存储的话,属性的类型还可以不同,比如balance金额可以用int或者float类型.
/
_private HashMap
// 程序块的目的,是在创建对象之前,给集合进行赋值操作
{
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try {
File file = new File(“src\atmsystem\User.txt”);
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
String value = bufferedReader.readLine();
_/**<br /> * 每一次循环都读到一行记录,拆完之后,组成一个对象,将对象存到集合里<br /> * '键'是名字,put方法的参数是个用户名+User对象--> put(帐号,User对象)<br /> * 对象里记录了当前账号里的所有信息,包括用户名帐号也在里面.<br /> */<br />_ _while (value != null){<br /> // value的信息拆分成三段,构建一个User对象,三个属性刚好存储,对象再存入集合<br /> String[] userValue = value.split("-");<br /> User user = new User(userValue[0],userValue[1],Float._parseFloat_(userValue[2]));<br /> userBox.put(user.getAname(),user);<br /> }<br /> } catch (Exception e) {<br /> e.printStackTrace();<br /> } finally {<br /> try {<br /> if(fileReader != null){<br /> fileReader.close();<br /> }<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> try {<br /> if(bufferedReader != null){<br /> bufferedReader.close();<br /> }<br /> } catch (IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}