我正在尝试将用户的名字和姓氏与文本文件中的名称进行比较,如果匹配则产生输出。如果名称不匹配,则程序会出错。当我运行程序时,我不断收到错误“线程中的异常”主“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");
}
}
}
}
答案 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