2017-04-12 15 views
0

ユーザーの姓と名をテキストファイルの名前と比較しようとしています。一致すると出力が生成されます。名前が一致しない場合プログラムからエラーが返されます。私は、プログラムを実行すると、私はエラー "スレッド"メイン "java.lang.ClassCastException: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

あなたはこの質問に誤ってタグを付けました。タグを削除しました。 –

+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 ReadFile.main(ReadFile.java:38)" – Becca

+0

@Beccaそして、例外はどういう意味ですか?明らかにそうではありません:[java.lang.ArrayIndexOutOfBoundsExceptionの原因となるのはなぜですか?](// stackoverflow.com/q/5554734) – Tom

1

変更

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

にライン

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

は予想以上にあなたのファイルを別の形式であると思われます。 変更 inputStream.useDelimiter( "[\ r、]"); 〜: inputStream.useDelimiter( "\ n"); 区切り文字は改行文字になります。

あなたは最初の行を読んでいて無視しています。それは目的にかなっていますか(ヘッダーの一部)?はいの場合、ファイルには少なくとも2行が必要です。あなたはあなたがコードで何が起こるかが表示されますので、1行

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

プラスあなたは

0123をspliting後にarrayNameのサイズをチェックしません場合は、 は、ArrayIndexOutOfBoundsExceptionを得ます以下のように、その上で、資源、試してみて、
関連する問題