2011-12-15 33 views
0

私のJavaアプリケーションでは、1つのファイルを読み込む必要があります。私が直面している問題は、ファイルを読んだ後に結果が非可読形式で来ていることです。つまり、いくつかのアスキー文字が表示されます。つまり、文字のどれもが読めるわけではありません。どうすればそれを表示させることができますか?javaファイルの読み込み問題

// Open the file that is the first 
     // command line parameter 

     FileInputStream fstream = new FileInputStream("c:\\hello.txt"); 
     // Get the object of DataInputStream 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String strLine; 
     // Read File Line By Line 
     while ((strLine = br.readLine()) != null) { 
      // Print the content on the console 
      System.out.println(strLine); 
     } 
     // Close the input stream 
     in.close(); 
    } catch (Exception e) {// Catch exception if any 
     System.err.println("Error: " + e.getMessage()); 
    } 
+0

hello.txtの内容は何ですか?また、出力には何が表示されますか? – Manish

+0

エンコードの問題のようです。 'hello.txt'はどう書かれましたか?他のテキストファイルでも同じ問題が発生しますか? –

+1

ファイルのエンコーディングがシステムのエンコーディングで動作することを確認してください。 Javaはデフォルトのエンコーディングを使用する必要があります。 – Steven

答えて

0

役立ちますit.Hopeを印刷する前に、文字や文字列にそれをキャスト入力する必要がありますので、

0

あなたは、処理するため、この方法を実装する必要があります -

BufferedReader br = new BufferedReader(new InputStreamReader(in, encodingformat)); 

encodingformat - エンコードの問題の種類に応じて変更してください。

例:UTF-8UTF-16、...すぐ

詳細はこのSupported Encodings by Java SE 6を参照してください。

+1

ファイルがUTF-8であることをどのように知っていますか? – buruzaemon

+0

@buruzaemon:はい、その人はどのようなタイプのエンコーディングの問題について言及されていないので。それで私は基本的なフォーマットを "UTF-8"と言いました。彼のフォーマット上の問題に基づいて、彼はそれに応じてそれを変更しなければならない。それは技術的に彼が処理しなければならないことです。私の答えで何が間違っています、それは "-1"として与えられましたか? –

+0

あなたはわかりません。しかし、このソースの断片はあなたがそれを指定する必要があることを示唆しています –

1

おそらくエンコードエラーです。 InputStreamReaderに使用しているコンストラクタは、デフォルトの文字エンコーディングを使用します。 ASCII範囲外のUTF-8テキストがファイルに含まれていると、ゴミが出るでしょう。また、ストリームからデータオブジェクトを読み取っていないため、DataInputStreamは必要ありません。このコードを試してください:あなたは、ファイルが入っているエンコーディングを知らないので、ファイルが使用するエンコーディングを検出するために、jchardetを使用し、他の人がすでに提案してきたように、ファイルを読むためにそのエンコーディングを使用

FileInputStream fstream = null; 
try { 
    fstream = new FileInputStream("c:\\hello.txt"); 
    // Decode data using UTF-8 
    BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
    String strLine; 
    // Read File Line By Line 
    while ((strLine = br.readLine()) != null) { 
     // Print the content on the console 
     System.out.println(strLine); 
    } 
} catch (Exception e) {// Catch exception if any 
    System.err.println("Error: " + e.getMessage()); 
} finally { 
    if (fstream != null) { 
     try { fstream.close(); } 
     catch (IOException e) { 
      // log failure to close file 
     } 
    } 
} 
+0

私はこれにいくつかのユーティリティを使うことを提案します。例えばCommons-ioではIOUtils.readLines(inputStream、encoding)とIOUtils.closeQuietely(someSource)があります。 –

+0

@PetrGladkikh - はい、commons-ioのようなutilsは良いです。それに言及してくれてありがとう。 –

0

。これは100%ばかげた証拠ではありませんが、あなたのシナリオではうまくいきます。

また、DataInputStreamの使用は不要です。あなたは、これは私の問題は解決しました

0

あなたが取得している出力は、ASCII値です。私は方法を知らない。 hello.txtの内容を別のファイルにコピーしてjavaプログラムを実行しました。私はすべての手紙を読むことができた。その問題は何なのか分かりません。