JAVA IO流根据电脑文件模拟登录,(读取文件和修改文件)

前段时间我一个朋友说让我帮他写一个根据文件内容进行登录,文件内容为账号和密码,进行模拟登陆和修改文件为修改密码

我用到的是io流进行操作,多的不说上代码

1.先写上一个实体类,存放用户的信息
package com.demo.until;

import java.io.Serializable;

/**
 * 
 * <br>Description:TODO 用户信息类功能描述
 * <br>Date:2019年12月17日
 */
public class userBean implements Serializable {
  //用户姓名
  private String userName;

  //密码
  private String password;

  //登录标识
  private boolean flag;

  //登录提示
  private String descText;

  public boolean isFlag() {
    return flag;
  }

  public void setFlag(boolean flag) {
    this.flag = flag;
  }

  public String getDescText() {
    return descText;
  }

  public void setDescText(String descText) {
    this.descText = descText;
  }

  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 userBean(String userName, String password, boolean flag, String descText) {
    super();
    this.userName = userName;
    this.password = password;
    this.flag = flag;
    this.descText = descText;
  }

  public userBean() {

  }

  @Override
  public String toString() {
    return "userBean [userName=" + userName + ", password=" + password + ", flag=" + flag + ", descText="
      + descText + "]";
  }

}

2.写上一个文件处理的工具类,这里用到了 读取文件 FileInputStream 和 写入文件BufferedWriter 两个文件类

FileInputStream 流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等

FileInputStream(文件字节读取流):

read():一个一个字节的读

read(byte[] buf):先把字节存入到缓冲区字节数组中,一下读一个数组(常用)

BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入;

write(str); 写入内容格式
flush();刷新,也就是刷一行
在这里插入图片描述

package com.demo.until;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class fileUntil {

  /**
   * 
   * <br>Description:TODO 读取文件方法功能描述
   * <br>Date:2019年12月17日
   * @param url
   * @return
   */
  public userBean getloginFileCheck(String url) {
    //url代表文件路径
    userBean userBean = new userBean();
    try {
      //"D:\\password.txt"
      File file = new File(url);
      byte[] bs = new byte[1026];
      int count = 0;
      String str = null;
      List<String> list = new ArrayList<String>();
      //用fileInputStream 进行读取文件内容
      FileInputStream fileInputStream = new FileInputStream(file);
      while ((count = fileInputStream.read(bs, 0, bs.length)) != -1) {
        str = new String(bs, 0, count, Charset.forName("UTF-8"));
      }
      //把文件内容进行截取  文件内容是这样的  (zs,123)
      String[] split = str.split(",");
      for (String st : split) {
        list.add(st);
      }
      userBean.setUserName(list.get(0));
      userBean.setPassword(list.get(1));

    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
    return userBean;
  }

  /**
   * 
   * <br>Description:TODO 修改文件和更改文件内容方法功能描述
   * <br>Date:2019年12月17日
   * @param file
   */
  public void fileUpdate(String file) {
    //file代表传来的修改内容
    BufferedWriter bw = null;
    try {
      bw = new BufferedWriter(new FileWriter("D:\\password.txt"));
      String str = file;
      bw.write(str);
      bw.flush();
      System.out.println("修改密码成功!");
      System.exit(0);
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    }
  }

}

3.接下来就是登陆的工具类
package com.demo.until;

public class loginUntil {

  /**
   * 
   * <br>Description:TODO 登录方法功能描述
   * <br>Date:2019年12月17日
   * @param userNameSc
   * @param passwordSc
   * @return
   */
  public userBean loginCheck(String userNameSc, String passwordSc) {
    //userNameSc  passwordSc 是传来的输入的账号密码
    userBean userBean = new userBean();
    //标明文件的路径
    String url = "D:\\password.txt";
    fileUntil fileUntil = new fileUntil();
    //调用文件读取文件账号密码的方法
    userBean getloginFileCheck = fileUntil.getloginFileCheck(url);
    if (!"".equals(userNameSc) && userNameSc != null) {
      if (!"".equals(passwordSc) && passwordSc != null) {
        if (userNameSc.equals(getloginFileCheck.getUserName())) {
          if (passwordSc.equals(getloginFileCheck.getPassword())) {
            userBean.setFlag(true);
            userBean.setDescText("登录成功!");
            return userBean;
          } else {
            userBean.setFlag(false);
            userBean.setDescText("密码输入有误!");
            return userBean;
          }
        } else {
          userBean.setFlag(false);
          userBean.setDescText("账号不存在!");
          return userBean;
        }
      } else {
        userBean.setFlag(false);
        userBean.setDescText("密码为空!");
        return userBean;
      }
    } else {
      userBean.setFlag(false);
      userBean.setDescText("账号为空!");
      return userBean;
    }

  }
}

4.接下来就是main方法,进行操作
package com.demo.until;

import java.util.Scanner;

public class testMain {
  public static void main(String[] args) {

    fileUntil fileUntil = new fileUntil();
    System.out.println("请输入账号:");
    //控制台输入
    Scanner scanner = new Scanner(System.in);
    //输入账号
    String usernameSc = scanner.next();
    System.out.println("请输入密码:");
    //输入密码
    String passwordSc = scanner.next();
    loginUntil loginUntil = new loginUntil();
    //调用登录方法
    userBean loginCheck = loginUntil.loginCheck(usernameSc, passwordSc);
    //判断登录方法返回的标识是成功还是失败
    boolean flag = loginCheck.isFlag();
    if (flag == true) {
      //输出登录成功提示
      System.out.println(loginCheck.getDescText());
      System.exit(0);
    } else {
      //失败进行修改密码
      System.out.println(loginCheck.getDescText());
      System.out.println("是否修改密码(1/0):");
      String next = scanner.next();
      if (next.equals("1")) {
        System.out.println("请输入新账号:");
        //输入新账号
        String newUsername = scanner.next();
        System.out.println("请输入新密码:");
        //输入新密码
        String newPassword = scanner.next();
        StringBuffer stringBuffer = new StringBuffer();
        //拼接新账号密码
        StringBuffer append = stringBuffer.append(newUsername).append(",").append(newPassword);
        //调用修改文件账号密码方法
        fileUntil.fileUpdate(append.toString());
      } else {
        System.out.println("输入有误!");
        System.exit(0);
      }
    }
  }

}

5.运行结果:

第一次账号密码
在这里插入图片描述

运行代码

在这里插入图片描述
文件结果:
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值