需求:在注册时验证下,所建立的txt文件里面是否有重复的信息?
结果进行reg(注册)时总会报错,请高手看看为什么?
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 java.util.Scanner;public class Mylogin {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws Exception{
System.out.println("A为登陆,B为注册");
String option = scanner.next();
boolean flag = true;
while(flag){
if("a".equalsIgnoreCase(option)){
System.out.println("请输入账号密码登陆");
}
else if("b".equalsIgnoreCase(option)){
System.out.println("请注册");
reg();
}
else{
System.out.println("输入错误请重新输入");
}
}
}
public static void reg() throws Exception{
System.out.println("请输入账号名字");
String name = scanner.next();
System.out.println("请输入密码");
String password = scanner.next();
String info = name+" "+password;
File file = new File("E:\\a.txt");
FileWriter filewriter = new FileWriter(file,true);
BufferedWriter bufferedwriter = new BufferedWriter(filewriter);
bufferedwriter.write(info);
bufferedwriter.newLine();
bufferedwriter.close();
//File file2 = new File("E:\\a.txt");
FileReader filereader = new FileReader(file);
BufferedReader bufferedreader = new BufferedReader(filereader);
String line = null;
boolean flag1 = false;
//boolean flag;
while((line = bufferedreader.readLine())!= null){
if(line!=info){
flag1 = true;
break;
}
bufferedreader.close();
}
if(flag1){
bufferedwriter.write(info);
bufferedwriter.newLine();
bufferedwriter.close();
}
}
}
结果进行reg(注册)时总会报错,请高手看看为什么?
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 java.util.Scanner;public class Mylogin {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws Exception{
System.out.println("A为登陆,B为注册");
String option = scanner.next();
boolean flag = true;
while(flag){
if("a".equalsIgnoreCase(option)){
System.out.println("请输入账号密码登陆");
}
else if("b".equalsIgnoreCase(option)){
System.out.println("请注册");
reg();
}
else{
System.out.println("输入错误请重新输入");
}
}
}
public static void reg() throws Exception{
System.out.println("请输入账号名字");
String name = scanner.next();
System.out.println("请输入密码");
String password = scanner.next();
String info = name+" "+password;
File file = new File("E:\\a.txt");
FileWriter filewriter = new FileWriter(file,true);
BufferedWriter bufferedwriter = new BufferedWriter(filewriter);
bufferedwriter.write(info);
bufferedwriter.newLine();
bufferedwriter.close();
//File file2 = new File("E:\\a.txt");
FileReader filereader = new FileReader(file);
BufferedReader bufferedreader = new BufferedReader(filereader);
String line = null;
boolean flag1 = false;
//boolean flag;
while((line = bufferedreader.readLine())!= null){
if(line!=info){
flag1 = true;
break;
}
bufferedreader.close();
}
if(flag1){
bufferedwriter.write(info);
bufferedwriter.newLine();
bufferedwriter.close();
}
}
}
我稍微的改动了一下:(这样就不会报错了)
这个业务流程还是有些逻辑错误,你自己看看
public static void reg() throws Exception{
System.out.println("请输入账号名字");
String name = scanner.next();
System.out.println("请输入密码");
String password = scanner.next();
String info = name+" "+password;
File file = new File("a.txt");
FileWriter filewriter = new FileWriter(file,true);
BufferedWriter bufferedwriter = new BufferedWriter(filewriter);
//File file2 = new File("E:\\a.txt");
FileReader filereader = new FileReader(file);
BufferedReader bufferedreader = new BufferedReader(filereader);
String line = null;
boolean flag1 = false;
//boolean flag;
while((line = bufferedreader.readLine())!= null){
if(info.equals(line)){
flag1 = true;
break;
}
}
if(flag1){
System.out.println("该用户已经存在,请直接登录!");
}else{
bufferedwriter.write(info);
bufferedwriter.newLine();
System.out.println("注册成功!");
}
bufferedwriter.close();
}
你注册的逻辑是:
1、把账号密码写入文件。
2、关闭流。
3、判断账号密码在数据库里面存在没,如果不存在就跳出循环。
4、不存在就写入账号密码。(你之前流已经关闭了,会报错)
5、关闭流。
正确的逻辑是
1、判断账号密码是否存在。
2、如果存在就flag1=true,break;
3、if(flag1){写入帐号密码,关闭流}