2017-04-12 100 views
0

我试图将用户的名字和姓氏与文本文件中的名称进行比较,如果匹配,则会生成输出。如果名称不匹配,则程序出错。当我运行该程序时,我不断收到错误“线程中的异常”main“java.lang.ClassCastException:java.io.File无法在ReadFile.main上转换为java.lang.Readable (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

您无意中标记了这个问题的c#。我删除了标签。 –

+0

你为什么对演员感到困扰? '新的扫描仪(新的文件(“...”))'是非常好的。 – Makoto

+3

'java.io.File不能转换为java.lang.Readable' ...'(可读)新文件(UserFile)'...现在这里还不清楚什么?真的,我不明白。 – Tom

回答

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

欢迎来到2017:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html – Tom

+0

我确实改变了这一点。谢谢,但我得到另一个错误,说:“线程”主“异常”java.lang.ArrayIndexOutOfBoundsException:1 \t at ReadFile.main(ReadFile.java:38)“ – Becca

+0

@Becca你试过找出这是什么例外的意思是?显然不是:[什么导致java.lang.ArrayIndexOutOfBoundsException,我该如何防止它?](// stackoverflow.com/q/5554734) – Tom

1

更改线路

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

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

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

此外,您正在阅读第一行,并忽略它。这是否有意(有些标题)?如果是,你的文件应该至少有两行文件。

还要取消行,所以你会读一个以上的线

//String line = inputStream.next(); 

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

+0

我确实改变了这一点。谢谢,但我得到另一个错误说:“线程”主“java.lang中的异常。ArrayIndexOutOfBoundsException:1 \t at ReadFile.main(ReadFile.java:38)“ – Becca

0

异常是人类可读的 - 你试图让unapropriate类转换,再加上错误的行会为你提供了ReadFile.java:24

您可以删除你的这个代码转换或开始使用新功能语言如流API,λ,尝试与 - 资源等等,像下面

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(); 
    } 

另外,您将得到ArrayIndexOutOfBoundsException异常,如果你不劈裂

0123后检查arrayName中的大小
相关问题