2016-05-09 15 views
0

DataInputStreamFileInputStreamを使ってテキストファイルから読み込もうとしました。 代わりにFileReaderを使うはずですが、バイトストリームで試してみたかったのです。私はEOF ExceptionreadUTf(unknownsource)エラーを取得し、 lol1.txtファイルから読み取るしようとした場合、ここでなぜ私は作成したファイルを読み込んでいるときにのみEOF例外を取得していますか?

はコード

import java.io.*; 

public class FTest_3 { 

public static void main(String[] args) throws IOException{ 
    DataInputStream stream = new DataInputStream(new FileInputStream("lol1.txt")); 
    String str = stream.readUTF(); 
    System.out.println(str); 
    stream.close(); 
} 
} 

です。

lol1.txtを使用してDataOutputStreamを使用して上記のコードを使用して読み取った場合、正常に動作します。ここで

はまた、私は私のクエリに答えることができる任意の関連記事を見つけることができなかったファイル

import java.io.*; 

public class FTest_4 { 

public static void main(String[] args) throws IOException{ 
    DataOutputStream stream = new DataOutputStream(new FileOutputStream("lol1.txt")); 
    stream.writeUTF("hahah"); 
    stream.close(); 
} 
} 

を書くために私のコードです。 ありがとう!

+1

どのようにファイルを元々作成していますか? –

+0

DataOutputStreamは特定のファイル形式を使用します。あなたは実際にファイルを他の方法で作成することはできず、それを読むことができると期待しています。特に、テキストファイルを読むことはできません。 – Thilo

+0

"バイトストリームで試してみたかった"。さて、そうしてください。 DataInputStreamはバイトストリームではありません。生のバイトの場合は、FileInputStreamを直接使用してください。 – Thilo

答えて

1

readUTFは、not a general-purpose method to read Strings from text filesである。

まず、後続のデータバイト数(バイト数、文字ではない)を含むと想定される2バイトを読み込みます。その後、変更されたUTF-8エンコーディングで文字列のバイトが来ます。

あなたの場合は、ファイルの先頭に2文字のASCII文字 "ha"(0x68 0x61)を読み込んでいた可能性があります。これは整数として解釈されるとかなり大きい数字です。それに合わせてファイルに残っているバイト数が足りません。

生のバイトを読み取るには、InputStream#readのいずれかのメソッドを使用します。

テキストファイルを読むには、InputStreamではなく、Readerを使用してください。次に、文字列も読み取ることができます。

+0

ありがとうございますサー! –

0

stream.read()を使用してください。 DataInputStreamを使用してテキストファイルから読み込む場合、または特定の値については、stream.readDouble()、stream.readInt()などを使用し、同様にDataOutputStreamを使用してテキストファイルに書き込むためにstream.write()を使用します。

関連する問題