ログイン登録事例——IOフロー実現

3955 ワード

ケーススタディ:IOストリームを介して登録されたデータをテキストに書き込み、ログイン時に入力ストリームを介して入力されたユーザー名、パスワードがテキストレコードと同じかどうかを検証します.
ここでは4つのバッグに分けることができます
domain-標準java記述クラス
dao-ストレージインタフェース
impl-メモリインタフェース実装クラス
text——テストクラス
domainに標準のUserクラスを書く
daoのインタフェースにはregist()とisLogin()の2つの方法があります
implではregist()とisLogin()の2つのメソッドを実装し、static修飾でデータをテキストにインポートするFileを作成します.
textクラスでメソッドテストを呼び出す;
具体的なコード:
標準Userクラス:
public class User {
	private String userName;
	private String password;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public User(String userName, String password) {
		super();
		this.userName = userName;
		this.password = password;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
}
インタフェース:
public interface UserDao {
	//      ,    ,    
	public abstract void regist(User user);
	
	public abstract boolean isLogin(String userName,String password);

}
インタフェース実装クラス:
public class UserDaoImpl implements UserDao{
	private static File file = new File("user.txt");
	
	//     :         
	static{
		//    
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Override
	public void regist(User user) {
		try {
			//  user          ,  user.txt  
			String info = user.getUserName()+"="+user.getPassword();
			BufferedWriter bw = new BufferedWriter(new FileWriter(file,true));//            FileWriter
			//        
			bw.write(info);
			bw.newLine();
			bw.flush();
			bw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public boolean isLogin(String userName, String password) {
		/**
		 * 1.         ,  user.txt
		 * 2.      
		 * 3.         
		 * 4.                  ,     flag   
		 */
		boolean flag = false;
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			String line;
			while ((line = br.readLine())!=null) {
				String[] strings = line.split("=");
				if (userName.equals(strings[0])&&password.equals(strings[1])) {
					//    
					flag = true;
				}
			}
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return flag;
	}	
}
テストクラス:
public class Test {
	public static void main(String[] args) {
		UserDaoImpl udi = new UserDaoImpl();
		
		while (true) {
			System.out.println("-----          ------");
			System.out.println("1:  ");
			System.out.println("2:  ");
			System.out.println("3:  ");
			//         
			
			
			Scanner sc = new Scanner(System.in);
			String chioce = sc.nextLine();
			switch (chioce) {
			case "1":
				System.out.println("        ");
				System.out.println("        ");
				String userName = sc.nextLine();
				System.out.println("       ");
				String password = sc.nextLine();
				User user = new User(userName, password);
				udi.regist(user);
				System.out.println("    ");
				break;
			case "2":
				System.out.println("        ");
				System.out.println("        ");
				String inputUserName = sc.nextLine();
				System.out.println("       ");
				String inputPassword = sc.nextLine();
				boolean login = udi.isLogin(inputUserName, inputPassword);
				if (login) {
					System.out.println("    ");
				}else {
					System.out.println("    ");
				}
				break;
			case "3":
			default:
				System.exit(0);
				break;
			}
		}
	}
}

この登録事例は、以前に集合で実現された登録事例とほぼ同じであり、主な違いは前者が集合にデータを格納し、プログラムが再実行されると、データがなくなることである.IOストリームによって実現されるこの例では、データはテキストに格納され、プログラムが終了するとテキストの内容は依然として存在し、プログラムを再起動すると、以前に登録したユーザー名とパスワードを利用してログインすることができる.