欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基于IO流實現(xiàn)登錄和注冊功能

 更新時間:2022年04月25日 18:28:29   作者:yangruxi  
這篇文章主要為大家詳細介紹了Java基于IO流實現(xiàn)登錄和注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

案例分析:

我們之前做過的登錄注冊案例是把用戶信息存進集合里,要用IO流實現(xiàn)的話,就是要把用戶信息存入文件中。登錄注冊兩個功能的具體實現(xiàn)是在用戶操作類中,所以我們只需要在用戶操作類中把之前用戶信息存進集合改為存進文件就可以了。

用到的類的詳細分解:

(1)用戶類(User):用戶名,密碼,郵箱,電話號碼等等各種注冊時會用到的東西。我們在實現(xiàn)這個登錄和注冊案例的時候只需要用戶名和密碼就夠了。這是一個標準Java描述類。

package com.edu.domain;

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 setPassWoed(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
? ? }


}

(2)我們需要定義一個接口(UserDao)來定義注冊和登錄功能。接口就是對類的功能的一種擴展,它的本質(zhì)是用來定義規(guī)則的。

package com.edu.dao;

import java.io.IOException;

import com.edu.domain.User;

public interface UserDao {
? ? //定義兩個功能
? ? //注冊功能
? ? public abstract void regist(User user) throws IOException;

? ? //登錄功能
? ? public abstract boolean isLogin(String userName,String passWord);

}

(3)用戶操作類(UserDaoImpl),也就是之前定義的接口UserDao的實現(xiàn)類。

package com.edu.dao.impl;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import com.edu.dao.UserDao;
import com.edu.domain.User;

public class UserDaoImpl implements UserDao{
? ? public static File file = new File("user.txt");

? ? //靜態(tài)代碼塊,隨著類的加載而加載
? ? static{
? ? ? ? try{
? ? ? ? ? ? file.createNewFile();
? ? ? ? }catch(IOException e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? //注冊功能
? ? @Override
? ? public void regist(User user) throws IOException {
? ? ? ? try{
? ? ? ? ? ? //把用戶信息存進文件里
? ? ? ? ? ? String info=user.getUserName()+"="+user.getPassWord();
? ? ? ? ? ? //創(chuàng)建高效字符輸出流來給文件寫入數(shù)據(jù),創(chuàng)建了一個可以追加寫入的FileWriter,避免了文件中之前的用戶信息被覆蓋
? ? ? ? ? ? BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt",true));
? ? ? ? ? ? bw.write(info);
? ? ? ? ? ? bw.newLine();
? ? ? ? ? ? bw.flush();
? ? ? ? ? ? bw.close();
? ? ? ? }catch(IOException e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? }

? ? //登錄功能
? ? @Override
? ? public boolean isLogin(String userName, String passWord) {
? ? ? ? boolean flag=false;
? ? ? ? try{
? ? ? ? ? ? //創(chuàng)建高效字符輸入流來讀取數(shù)據(jù)
? ? ? ? ? ? BufferedReader br = new BufferedReader(new FileReader("user.txt"));
? ? ? ? ? ? String line;
? ? ? ? ? ? while ((line=br.readLine())!=null) {
? ? ? ? ? ? ? ? String[] s=line.split("=");
? ? ? ? ? ? ? ? if (s[0].equals(userName)&&s[1].equals(passWord)) {
? ? ? ? ? ? ? ? ? ? flag=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }catch(IOException e){
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return flag;
? ? }


}

(4)在用戶完成注冊登錄后,我們可以實現(xiàn)某種功能了,例如:猜數(shù)字小游戲。再建一個游戲類(GuessNumber)。

package com.edu.game;

import java.util.Scanner;

public class GuessNumber {
? ? public static void playGame(){
? ? ? ? //獲取一個1到100的隨機數(shù)
? ? ? ? int random = (int)(Math.random()*100+1);

? ? ? ? //鍵盤錄入
? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? //給出提示
? ? ? ? System.out.println("請輸入所猜的數(shù)字");
? ? ? ? int number = sc.nextInt();

? ? ? ? while(true){
? ? ? ? ? ? if(number==random){
? ? ? ? ? ? ? ? System.out.println("恭喜你猜對了!");
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }else if(number>random){
? ? ? ? ? ? ? ? System.out.println("大了,請繼續(xù)輸入:");
? ? ? ? ? ? ? ? number=sc.nextInt();
? ? ? ? ? ? }else if(number<random){
? ? ? ? ? ? ? ? System.out.println("小了,請繼續(xù)輸入:");
? ? ? ? ? ? ? ? number=sc.nextInt();
? ? ? ? ? ? }
? ? ? ? }
? ? }

}

(5)測試類(Test)。

package com.edu.test;

import java.io.IOException;
import java.util.Scanner;

import com.edu.dao.impl.UserDaoImpl;
import com.edu.domain.User;
import com.edu.game.GuessNumber;

public class Test {
? ? public static void main(String[] args) throws IOException {
? ? ? ? while (true) {
? ? ? ? ? ? //創(chuàng)建鍵盤錄入對象,獲取鍵盤錄入信息
? ? ? ? ? ? Scanner sc = new Scanner(System.in);
? ? ? ? ? ? System.out.println("歡迎來到注冊登錄界面!");
? ? ? ? ? ? System.out.println("1.注冊");
? ? ? ? ? ? System.out.println("2.登錄");
? ? ? ? ? ? System.out.println("3.退出");
? ? ? ? ? ? String choice = sc.nextLine();

? ? ? ? ? ? //創(chuàng)建一個用戶操作類
? ? ? ? ? ? UserDaoImpl udi = new UserDaoImpl();

? ? ? ? ? ? //利用switch循環(huán)對選擇進行操作
? ? ? ? ? ? switch(choice){
? ? ? ? ? ? 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();
? ? ? ? ? ? ? ? if (udi.isLogin(inputUserName,InputPassWord)) {
? ? ? ? ? ? ? ? ? ? System.out.println("登陸成功!可以玩游戲了!");
? ? ? ? ? ? ? ? ? ? GuessNumber.playGame();
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? System.out.println("登錄失敗!");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case "3":
? ? ? ? ? ? default:
? ? ? ? ? ? ? ? //對于3或者其他數(shù)字的選擇,都直接退出系統(tǒng)
? ? ? ? ? ? ? ? System.exit(0);
? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

運行結(jié)果:

登錄的注冊的運行結(jié)果:

猜數(shù)字游戲后退出系統(tǒng):

案例實現(xiàn)過程中遇到的小問題:

如果用下面這個構(gòu)造來創(chuàng)建高效字符輸出流對象,程序每運行一次,新輸入的用戶信息會把之前的用戶信息覆蓋掉,文件中只有最近一次存入的用戶信息。

BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt");

如何解決這個問題:

我們用下面這個構(gòu)造來創(chuàng)建高效字符輸出流來給文件寫入數(shù)據(jù),創(chuàng)建了一個可以追加寫入的FileWriter,避免了文件中之前的用戶信息被覆蓋。

BufferedWriter bw = new BufferedWriter(new FileWriter("user.txt",true));

參考:

FileWriter(String fileName, boolean append)
//根據(jù)給定的文件名以及指示是否附加寫入數(shù)據(jù)的 boolean 值來構(gòu)造 FileWriter 對象

例如:我注冊了三次,文件中就有了這三次存入的用戶信息。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring是怎么擴展解析xml接口的

    Spring是怎么擴展解析xml接口的

    這篇文章主要介紹了Spring是怎么擴展解析xml接口的,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Java中的多種文件上傳方式總結(jié)

    Java中的多種文件上傳方式總結(jié)

    這篇文章主要介紹了Java中的多種文件上傳方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • JEE與Spring Boot代碼性能比較分析

    JEE與Spring Boot代碼性能比較分析

    JavaEE與Spring Boot其實很難比較測試,前者適合單體SOA架構(gòu),后者適合微服務(wù),但是還是有好事者把兩者放在一起比較性能。這篇文章主要介紹了JEE與Spring Boot代碼性能比較,需要的朋友可以參考下
    2018-11-11
  • Spring搭配Ehcache實例解析

    Spring搭配Ehcache實例解析

    這篇文章主要為大家詳細介紹了Spring搭配Ehcache實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • java實現(xiàn)JSON字符串格式化輸出

    java實現(xiàn)JSON字符串格式化輸出

    這篇文章主要為大家詳細介紹了如何使用java實現(xiàn)JSON字符串格式化輸出,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2024-01-01
  • 聊聊Lombok中的@Builder注解使用教程

    聊聊Lombok中的@Builder注解使用教程

    @Builder注解的作用主要是用來生成對象,并且可以為對象鏈式賦值。接下來通過本文給大家介紹Lombok中的@Builder注解使用教程,感興趣的朋友一起看看吧
    2021-11-11
  • SpringBoot實現(xiàn)登錄校驗(JWT令牌)

    SpringBoot實現(xiàn)登錄校驗(JWT令牌)

    JWT全稱為JSON Web Token,是一種用于身份驗證的開放標準,本文主要介紹了SpringBoot實現(xiàn)登錄校驗(JWT令牌),具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • MyBatis是如何實現(xiàn)日志模塊的詳解

    MyBatis是如何實現(xiàn)日志模塊的詳解

    這篇文章主要給大家介紹了關(guān)于MyBatis是如何實現(xiàn)日志模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 探索分析Redis?AOF日志與數(shù)據(jù)持久性

    探索分析Redis?AOF日志與數(shù)據(jù)持久性

    這篇文章主要為大家介紹了探索分析Redis?AOF日志與數(shù)據(jù)持久性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • idea推送項目到gitee中的創(chuàng)建方法

    idea推送項目到gitee中的創(chuàng)建方法

    這篇文章主要介紹了idea推送項目到gitee中的創(chuàng)建方法,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08

最新評論