Java用IO流製作一個簡單的使用者登陸註冊程式
阿新 • • 發佈:2019-01-02
使用者操作的介面類
public interface UserDao {
/**
* 這是使用者登入功能
*
* @param username
* 登入的使用者名稱
* @param password
* 登入的使用者密碼
* @return 返回的是使用者是否成功,true,成功;false,失敗
*/
public abstract boolean isLogin(String username, String password);
/**
* 這是使用者註冊功能
*
* @param user
* 需要註冊的使用者
*/
public abstract void register(User user);
}
使用者操作的介面的實現類
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class UserDaoImpl implements UserDao {
// 為保證user.txt在載入類之前已經被建立了,將建立檔案寫成靜態的
private static File file = new File("user.txt");
static {
if (file != null) {
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("建立檔案失敗..." );
}
}
}
// 登入
@Override
public boolean isLogin(String username, String password) {
// 定義最終值
boolean flag = false;
// 使用字元緩衝輸入流讀取user.txt檔案中的內容
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
// 一次讀取一行
String line = null;
while ((line = br.readLine()) != null) {
// 字串的分割功能
String[] datas = line.split("=");
// 判斷
if (datas[0].equals(username) && datas[1].equals(password)) {
flag = true;
break;
}
}
} catch (FileNotFoundException e) {
System.out.println("找不到檔案");
} catch (IOException e) {
System.out.println("登入失敗");
} finally {
if (br != null) {
try {
// 釋放資源
br.close();
} catch (IOException e) {
System.out.println("登入時釋放資源失敗");
}
}
}
return flag;
}
// 註冊功能
@Override
public void register(User user) {
// 定義的規則:使用者名稱=密碼
// 建立字元緩衝輸出流
BufferedWriter bw = null;
try {
// 在檔案末尾自動追加
bw = new BufferedWriter(new FileWriter(file, true));
// 寫資料
bw.write(user.getUsername() + "=" + user.getPassword());
bw.newLine();
bw.flush();
} catch (IOException e) {
System.out.println("使用者註冊失敗...");
} finally {
// 釋放資源
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
System.out.println("註冊時釋放的資源失敗");
}
}
}
}
}
使用者實體類
public class User {
private String username;
private String password;
public User() {
super();
}
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;
}
}
使用者登入註冊的測試類
import java.util.Scanner;
public class UserTest {
public static void main(String[] args) {
while (true) {
System.out.println("請輸入您的選擇:");
System.out.println("1 登入");
System.out.println("2 註冊");
System.out.println("3 退出");
// 建立鍵盤錄入物件
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
// 錄入資料
String choice = sc.nextLine();
// 登入和註冊都會使用介面實現類中的功能所以將 物件建立在主執行緒
UserDao ud = new UserDaoImpl();
// 使用switch語句
switch (choice) {
case "1":
// 登入
System.out.println("登陸:");
System.out.println("請輸入使用者名稱:");
String username = sc.nextLine();
System.out.println("請輸入密碼:");
String password = sc.nextLine();
// 呼叫登入功能
boolean flag = ud.isLogin(username, password);
if (flag) {
System.out.println("恭喜您,登入成功");
System.exit(0);// 退出
} else {
// 登入失敗
System.out.println("使用者名稱或者密碼輸入錯誤");
}
break;
case "2":
// 註冊
System.out.println("註冊:");
System.out.println("請輸入使用者名稱:");
String newUserName = sc.nextLine();
System.out.println("請輸入密碼:");
String newPwd = sc.nextLine();
// 將使用者名稱和密碼封裝User物件
User user = new User();
user.setUsername(newUserName);
user.setPassword(newPwd);
// 呼叫註冊功能
ud.register(user);
System.out.println("註冊成功...");
break;
case "3":
System.out.println("謝謝使用,下次再來");
System.exit(0);
default:
System.out.println("輸入有誤請重試");
break;
}
}
}
}
測試結果
請輸入您的選擇:
1 登入
2 註冊
3 退出
a
輸入有誤請重試
請輸入您的選擇:
1 登入
2 註冊
3 退出
2
註冊:
請輸入使用者名稱:
aaa
請輸入密碼:
sss
註冊成功...
請輸入您的選擇:
1 登入
2 註冊
3 退出
1
登陸:
請輸入使用者名稱:
aaa
請輸入密碼:
sss
恭喜您,登入成功