Java 将用户输入与文本文件中的字符串进行比较

Java 将用户输入与文本文件中的字符串进行比较,java,Java,我试图将用户名和姓氏与文本文件中的名称进行比较,如果匹配,则生成一个输出。如果名称不匹配,则程序会给出一个错误。当我运行程序时,我不断得到错误“Exception in thread”main“java.lang.ClassCastException:java.io.File无法转换为java.lang.Readable 位于ReadFile.main(ReadFile.java:24)” 您正在将文件强制转换为可读文件 Scanner inputStream = new Scanner((Re

我试图将用户名和姓氏与文本文件中的名称进行比较,如果匹配,则生成一个输出。如果名称不匹配,则程序会给出一个错误。当我运行程序时,我不断得到错误“Exception in thread”main“java.lang.ClassCastException:java.io.File无法转换为java.lang.Readable 位于ReadFile.main(ReadFile.java:24)”


您正在将文件强制转换为可读文件

Scanner inputStream = new Scanner((Readable) new File(UserFile));
删除它并用try-and-catch环绕语句

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

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

您的文件的格式似乎与预期的不同。 改变 inputStream.useDelimiter(“[\r,]”); 致: inputStream.useDelimiter(“\n”); 因此,您的分隔符将是换行符

此外,你正在阅读第一行,却忽略了它。这是故意的吗?如果是,则文件中至少应有两行

同时取消对该行的注释,这样您将阅读多行内容


尝试在调试器中运行它,以便查看代码中发生的情况。

异常是人类可读的-您正在尝试进行不适当的类转换,并且为您提供了带错误的行。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();
    }
try(Stream=Files.line(path.get(UserFile))){
stream.forEach(行->{
字符串[]arrayName=line.split(“,”);
如果(arrayName.length>=2){
字符串FName=arrayName[0];
字符串LName=arrayName[1];
System.out.println(FirstName.equals(FName)和&LastName.equals(LName)
?“您已登录”:“您需要创建一个新帐户”);
}
});
}捕获(IOE异常){
e、 printStackTrace();
}

另外,如果拆分后不检查arrayName的大小,您将获得ArrayIndexOutOfBoundsException

您意外地将此问题标记为c#。我把标签拿掉了。你为什么要麻烦演员
newscanner(新文件(“…”)
非常好。
java.io.File不能强制转换为java.lang.Readable
<代码>(可读)新文件(用户文件)。。。现在有什么是不清楚的?真的,我不明白。欢迎来到2017年:我确实改变了这一点。谢谢,但我收到了另一个错误,上面写着:线程“main”java.lang.ArrayIndexOutOfBoundsException:1 at ReadFile.main(ReadFile.java:38)”@Becca中的异常,您尝试过找出这个异常的含义吗?显然不是:我确实改变了这一点。谢谢,但我得到了另一个错误,它是:线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:1位于ReadFile.main(ReadFile.java:38)
Scanner inputStream = new Scanner(new FileReader(UserFile));
//String line = inputStream.next();
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();
    }