2017-12-03 19 views
0

私の基本的なコードは、ファイルがパスに基づいて、exitenceチェックしようとしている、UTF-8文字を使用した作業が、それは、Unicode文字を扱うことができません:入力(つまり、ファイルパスJavaの

 Scanner scanner = new Scanner(System.in); 
     String input = scanner.nextLine(); 
     File f = new File(input); 
     if (f.exists()) { 
      System.out.println("File is Found, According to java.io"); 
     } else { 
      System.out.println(f.toString() + " is Not Existed, According to java.io "); 
     } 

     Path x = Paths.get(input); 
     if (Files.exists(x)) { 
      System.out.println("File is Found, According to java.nio"); 
     } else { 
      System.out.println(x.toString() + " is Not Existed, According to java.nio"); 
     } 

)がASCIIであれば、コードはうまく動作しますが、入力にUTF-8文字が含まれていると、コードは両方とも失敗します。

1-入力を正しく印刷します。

入力:

C

2-決定は、ファイルが存在する

例(すなわち、ファイルが存在する場合でも、コードがそのファイルが終了していない指示します) ://€.jpg

出力:

C:\ JPGが存在しなかっされ、java.io

Cによると:。。\ JPGは、私は、NetBeansを使用java.nioの

によると、存在していませんJava 1.8、maven。

PS:私が使用してみました:と

実行:

の-Dfile.encoding = UTF-8

は、プロパティを投影するfollowignを追加します。

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

ですが、何も起こりませんでした。

お願いします。

+1

問題は、適切な入力エンコーディングを使用する必要があるということですので、文字列が正しいです。デバッガで、 'input'に設定されているものが正確に含まれているかどうかを確認してください。あなたはおそらく驚くでしょう。 –

答えて

1

正確には、ファイルのエンコーディングが、入力エンコーディングを必要としません。したがって、あなたはScanner(InputStream source, String charsetName)コンストラクタを使用してScannerのための文字セットを指定することができます。

Scanner scanner = new Scanner(System.in, "UTF-8"); 
+0

申し訳ありませんが、何も変更されていません。 – Nosairat

+2

@Nosairat UTF-8でエンコードしたテキストファイルから入力をパイプしてみてください。端末とスキャナのエンコーディングが整列していないか、使用しようとしている文字がサポートされていない可能性があります。 –

関連する問題