需求:在注册时验证下,所建立的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();
        } 
       }
}

解决方案 »

  1.   

    错误信息已经很明确了,java.io.IOException: Stream closed流已经被关闭。bufferedwriter对象在45行被关闭,而在62行使用了这个已经关闭的流,所以会出错
      

  2.   

    看过了,逻辑错了!还有就是提前把流给关闭了,所以就出现了这个问题!
    我稍微的改动了一下:(这样就不会报错了)
    这个业务流程还是有些逻辑错误,你自己看看
    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();
           }
      

  3.   

    注册的逻辑错了。
    你注册的逻辑是:
    1、把账号密码写入文件。
    2、关闭流。
    3、判断账号密码在数据库里面存在没,如果不存在就跳出循环。
    4、不存在就写入账号密码。(你之前流已经关闭了,会报错)
    5、关闭流。
    正确的逻辑是
    1、判断账号密码是否存在。
    2、如果存在就flag1=true,break;
    3、if(flag1){写入帐号密码,关闭流}