Java-->IO流模拟实现用户登录以及登录信息
--> Test 测试类
package com.dragon.java.hwlogin; import java.io.FileNotFoundException;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set; /*
* 模拟用户登陆,并记录登陆日志。
a:根据用户的选择是注册用户还是登陆用户。
b:如果是用户注册把用户注册的用户名和密码保存在文件中,文件可以记录多组用户名和密码。
c:每个用户每登陆一次都生产一个登陆记录,把登陆记录保存在文件中,形成登陆日志。登陆记录格式(用户名, 密码, 登陆时间): ==zhangsan, xxxxx, 2016年8月16日 13:20:20==
d:如果是用Admin管理员的身份登陆的,可以查看所有的用户的登陆记录。否则其他用户只可以查看自己的登陆记录。
*/
public class Test {
static Set<User> set = new HashSet<>(); @SuppressWarnings("resource")
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(System.in);
AdminUser adminUser = new AdminUser();
User thisUser = null;
// 首先将曾经的用户信息存入集合中
adminUser.splitFile(AdminUser.filePath2, set);
while (true) {
System.out.println("-----欢迎使用xxx系统-----");
System.out.println("1.注册用户 2.登录用户");
System.out.println("3.管理员登录 4.退出");
System.out.println("请输入序号:");
String name = null, password = null;
switch (scanner.nextInt()) {
case 1:
System.out.println("-----用户注册:-----");
System.out.println("请输入用户名:");
name = scanner.next();
System.out.println("请输入密码:");
password = scanner.next();
System.out.println("请确认密码:");
if (!scanner.next().equals(password)) {
System.out.println("两次输入的密码不相同!");
continue;
}
if (set.size() != 0) {
if (adminUser.userExist(name, set) != null) {
System.out.println("该用户已存在!");
break;
} else {
adminUser.userRegister(name, password, set);
}
} else {
adminUser.userRegister(name, password, set);
}
break;
case 2:
System.out.println("-----用户登录:-----");
if (set.size() != 0) {
System.out.println("请输入用户名:");
name = scanner.next();
System.out.println("请输入密码:");
password = scanner.next();
if ((thisUser = adminUser.userExist(name, set)) == null) {
System.out.println("该用户不存在!");
} else if (!password.equals(thisUser.getPassword())) {
System.out.println("密码错误!");
} else {
System.out.println("亲爱的" + thisUser.getName()
+ ",您的登录记录为:");
// 得到所有的用户曾登录信息并与当前用户进行比较
Set<User> setTime = new HashSet<>();
adminUser.splitFile(AdminUser.filePath, setTime);
for (User user : setTime) {
if (thisUser.getName().equals(user.getName())) {
System.out.println(user);
}
}
System.out.println("您现于" + adminUser.loginTime()
+ "登录!");
adminUser.userLogin(name, password,
adminUser.loginTime(), set);
}
} else {
System.out.println("还没有用户注册!");
continue;
}
break;
case 3:
adminUser.readUser();
break;
case 4:
System.out.println("已退出!");
System.exit(0);
default:
System.out.println("输入有误!...");
continue;
}
}
}
}
--> AdminUser 类对用户登录进行控制以及录入信息
package com.dragon.java.hwlogin; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.Set; class AdminUser {
@SuppressWarnings("unused")
private static InputStream in = System.in;
private static PrintStream out = System.out;
private static PrintStream ps = null;
private static BufferedReader br = null;
static String filePath = "D:/workspace/08-16/src/com/dragon/java/hwlogin/login.txt";
static String filePath2 = "D:/workspace/08-16/src/com/dragon/java/hwlogin/users.txt"; /**
* 判断user 是否存在
*
* @param name
* @param set
* @return
*/
public User userExist(String name, Set<User> set) {
for (User user : set) {
if (name.equals(user.getName())) {
return user;
}
}
return null;
} /**
* 用户登录
*
* @param name
* @param password
* @param time
* @param set
*/
public void userLogin(String name, String password, String time,
Set<User> set) {
User user = new User(name, password, time);
writeUser(ps, user, filePath, set);
} /**
* 用户注册
*
* @param name
* @param password
* @param set
*/
public void userRegister(String name, String password, Set<User> set) {
User user = new User(name, password);
writeUser(ps, user, filePath2, set);
} /**
* 登录用的曾登录信息,通过读取当前的系统时间
*
* @return
*/
public String loginTime() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy年MM月dd日 hh:mm:ss", Locale.CHINA);
Date date = new Date(System.currentTimeMillis());
String time = simpleDateFormat.format(date); // 当前系统时间
return time;
} /**
* 读取所有用户的登录信息
*/
public void readUser() {
try {
br = new BufferedReader(new FileReader(filePath));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println(e);
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println(e);
}
}
} /**
* 将用户信息(或登录信息)写入到文件中
*
* @param ps
* @param user
* @param file
* @param set
*/
public void writeUser(PrintStream ps, User user, String file, Set<User> set) {
set.add(user);
try {
// FileOutputStream(file,true) --> true表示确认文件追加 --> 即不刷新文件
ps = new PrintStream(new FileOutputStream(file, true), true);
System.setOut(ps);
System.out.println(user);
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
// 重新设置"标准"输出流到控制台
System.setOut(out);
}
} /**
* 将存储信息的文件分割得到用户数据并存入集合
*
* @param file
* @param set
*/
public void splitFile(String file, Set<User> set) {
try {
br = new BufferedReader(new FileReader(file));
String line = null;
while ((line = br.readLine()) != null) {
String[] strings = line.split(",");
User user = new User(strings[0].substring(11,
strings[0].length()), strings[1].substring(10,
strings[1].length()), strings[2].substring(6,
strings[2].length()));
set.add(user);
}
} catch (IOException e) {
System.out.println(e);
} finally {
try {
br.close();
} catch (IOException e) {
System.out.println(e);
}
}
}
}
--> User 类存放用户的属性
package com.dragon.java.hwlogin;
class User {
private String name;
private String password;
private String time;
User() {
super();
}
User(String name, String password) {
super();
this.name = name;
this.password = password;
}
User(String name, String password, String time) {
this(name, password);
this.time = time;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + ", time="
+ time + "]";
}
}
--> 重定向输入输出流之前要先保存系统默认的输入输出流(即System.in 和 System.out),以便恢复...
Java-->IO流模拟实现用户登录以及登录信息的更多相关文章
- JAVA IO流的简单总结+收集日志异常信息
1.字节流: IuputStream 所有字节输出流的超类 . 抽象类 ---- FileInputStream ---- BufferedInputStream:提供数据的读取效率,拓展方法(内部维 ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- JAVA.IO流学习笔记
一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...
- Java IO流学习总结八:Commons IO 2.5-IOUtils
Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...
- Java IO 流 -- 设计模式:装饰设计模式
在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(ne ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流学习总结
Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
随机推荐
- Android 浮动搜索框 searchable 使用(转)。
Android为程序的搜索功能提供了统一的搜索接口,search dialog和search widget,这里介绍search dialog使用.search dialog 只能为于activity ...
- RelativeLayout练习
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- Elasticsearch内存分配设置详解
Elasticsearch默认安装后设置的内存是1GB,对于任何一个现实业务来说,这个设置都太小了.如果你正在使用这个默认堆内存配置,你的集群配置可能会很快发生问题. 这里有两种方式修改Elastic ...
- 二模 (2) day1
第一题: 题目描述:淘汰赛制是一种极其残酷的比赛制度.2n名选手分别标号1,2,3,…,2n-1,2n,他们将要参加n轮的激烈角逐.每一轮中,将所有参加该轮的选手按标号从小到大排序后,第1位与第2位比 ...
- 2.精通前端系列技术之seajs模块化使工作更简单(二)
drag.js // JavaScript Document //B开发 define(function(require,exports,module){ function drag(obj){ ; ...
- iOS app调试的黑魔法--第三方库
http://www.cocoachina.com/ios/20140928/9785.html
- cmd打开控制面板及其他命令
如果你在权限较小的域用户的机器上,要做一些管理操作,就不可避免的要使用cmd打开一些以前只能在图形界面里打开的程序.下面是我收集的一些常用操作. 以某个身份启动程序:runas /user:it\n1 ...
- TClientDataSet 设计期 多次New 字段问题
第一次New几个字段后,右键菜单CreateDataSet 后来需要再New几个字段. 右键菜单,先 ClearData(不这样,会报 打开的数据集不能执行 这个New字段的操作),然后在 字段编辑器 ...
- 基于Lumisoft.NET组件的POP3邮件接收和删除操作
From: http://www.cnblogs.com/wuhuacong/archive/2013/05/06/3063093.html Lumisoft.NET组件是一个非常强大的邮件发送.邮件 ...
- flask剖析
1.为何只要通过import request,就能拿到对应的request呢?怎么解决区分请求,区分线程的问题? 简而言之,就是通过拿栈顶对象就表示是当前活动的对象 但对于多线程,由于栈的数据结构是 ...