比较用户输入到文本文件中的字符串

时间:2017-04-12 15:31:32

标签: java

我正在尝试将用户的名字和姓氏与文本文件中的名称进行比较,如果匹配则产生输出。如果名称不匹配,则程序会出错。当我运行程序时,我不断收到错误“线程中的异常”主“java.lang.ClassCastException:java.io.File无法强制转换为java.lang.Readable     在ReadFile.main(ReadFile.java:24)“

public class ReadFile {

    public static void main(String[] args) throws FileNotFoundException {
        // TODO Auto-generated method stub
        @SuppressWarnings("resource")
        Scanner Input = new Scanner(System.in);
        System.out.print("Enter First Name:");
        String FirstName = Input.nextLine();

        @SuppressWarnings("resource")
        Scanner Input1 = new Scanner(System.in);
        System.out.print("Enter Last Name:");
        String LastName = Input1.nextLine();

        String UserFile = "UserFile.txt";
        @SuppressWarnings("resource")
        //BufferedReader inputStream =new BufferedReader(new FileReader("myfile.txt")); 
        Scanner inputStream = new Scanner((Readable) new File(UserFile));


        String line = inputStream.nextLine();
        inputStream.useDelimiter("[\\r,]");
        while (inputStream.hasNext())
        {
            //contains name
        //String line = inputStream.next();

            //split names
             String [] arrayName = line.split(",");
             String FName = arrayName[0];
             String LName = arrayName[1];           

             if(FirstName.equals(FName) && LastName.equals(LName)) 
             {
                 System.out.println("You are Logged IN");
             }

             else 
             {
                 System.out.println("You need to create a new account");
             }

        }


    }



    }

3 个答案:

答案 0 :(得分:1)

您正在将文件转换为可读文件。

Scanner inputStream = new Scanner((Readable) new File(UserFile));

删除它并使用try和catch包围语句。

Scanner inputStream = null;
try
{
    inputStream = new Scanner(new File(UserFile));
}
catch(Exception e)
{
    e.printStackTrace();
}
finally
{
    if(inputStream != null)
    {
        inputStream.close();
    }
}

答案 1 :(得分:1)

更改行

'{'

Scanner inputStream = new Scanner((Readable) new File(UserFile));

似乎您的文件格式与预期不同。 更改     inputStream.useDelimiter( “[\ R,]”); 至:     inputStream.useDelimiter( “\ n”); 所以你的分隔符将是换行符。

除此之外,您正在阅读第一行并忽略它。它是故意的(一些标题)?如果是,您的文件应至少在文件中包含两行。

同时取消注释该行,因此您将阅读更多的那一行

Scanner inputStream = new Scanner(new FileReader(UserFile));

尝试在调试器中运行它,这样你就会看到代码中会发生什么。

答案 2 :(得分:0)

异常是人类可读的 - 您正在尝试进行不合适的类强制转换,并为您提供错误行 ReadFile.java:24

您可以从代码中删除此强制转换,或者开始使用Streams API,lambda,try-with-resources等语言的新功能,如下所示

try (Stream<String> stream = Files.lines(Paths.get(UserFile))) {
    stream.forEach(line -> {
        String[] arrayName = line.split(",");
        if (arrayName.length >= 2) {
            String FName = arrayName[0];
            String LName = arrayName[1];

            System.out.println(FirstName.equals(FName) && LastName.equals(LName)
                    ? "You are Logged IN" : "You need to create a new account");
        }
    });
} catch (IOException e) {
        e.printStackTrace();
    }

另外,如果在拆分后不检查arrayName的大小,则会得到 ArrayIndexOutOfBoundsException