--> 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流模拟实现用户登录以及登录信息的更多相关文章

  1. JAVA IO流的简单总结+收集日志异常信息

    1.字节流: IuputStream 所有字节输出流的超类 . 抽象类 ---- FileInputStream ---- BufferedInputStream:提供数据的读取效率,拓展方法(内部维 ...

  2. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  3. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

  4. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  5. JAVA.IO流学习笔记

    一.java.io 的描述 通过数据流.序列化和文件系统提供系统输入和输出.IO流用来处理设备之间的数据传输 二.流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数 ...

  6. Java IO流学习总结八:Commons IO 2.5-IOUtils

    Java IO流学习总结八:Commons IO 2.5-IOUtils 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/550519 ...

  7. Java IO 流 -- 设计模式:装饰设计模式

    在java IO 流中我们经常看到这样的写法: ObjectOutputStream oos = new ObjectOutputStream( new BufferedOutputStream(ne ...

  8. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  9. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  10. 揭开Java IO流中的flush()的神秘面纱

    大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...

随机推荐

  1. js打印对象(object)

    function printObject(obj){//obj = {"cid":"C0","ctext":"区县"}; ...

  2. C#解析复杂的Json成Dictionary<key,value>并保存到数据库(多方法解析Json 四)

    准备工作: 1.添加引用System.Web.Extensions, 2..net3.5+版本都有,如果VS2010找不到,在这个文件夹找:C:\Program Files\Reference Ass ...

  3. svn自动更新

    果对svn不熟悉,当svn上面有更新时,想看到实时效果,就得去web目录手动更新,比较麻烦 其它svn有一个自动更新的功能 利用 hook   在svn 仓库目录下面有一个hook目录 在post-c ...

  4. Failed to instantiate the default view controller for UIMainStoryboardFile 'Main'

    给UITableViewController 展示数据时候 删除系统自带viewController 然后拖过来一个UITableViewController 指定class后没有指定main入口 报 ...

  5. swing Event-Listener-Adapter 对照表

    Source Event Event Listener AbstractButton (JButton,JToggleButton, JCheckBox,JRadioButton ActionEven ...

  6. vi编辑器选项

    Vi编辑器有一些选项设置可以帮助人们更好的使用. 在vi中选项分为两种: 1.  开关选项,如果要打开这类选项就使用ex命令——:set 选项:如果要关闭这类选项就是用ex命令——:set  no选项 ...

  7. pig

    1.Pig是基于hadoop的一个数据处理的框架. MapReduce是使用java进行开发的,Pig有一套自己的数据处理语言,Pig的数据处理过程要转化为MR来运行.2.Pig的数据处理语言是数据流 ...

  8. 加强版for循环

    /*加强版for循环 * 5.0以后有加强版for循环 * for(String name:nameArray){} * 1.String name:声明会带有数组单一元素的循环变量 *   数组元素 ...

  9. stm32 dac库函数解读

    1.简述: 12位数字输入,电压输出,DAC可以配置为8位或12位模式.有2个输出通道.在双DAC模式下,两个通道可以独立地工作. 特殊功能: 噪声波形生成,三角波形生成,外部触发转换,双DAC同时或 ...

  10. Stm32_调试出现 Error:Flash Download Failed-"Cortex-M3"

    rror:Flash Download Failed-"Cortex-M3"出现一般有两种情况: 1.SWD模式下,Debug菜单中,Reset菜单选项(Autodetect/HW ...