ファイルでいくつかの操作を行おうとすると、コードは次のようになります。
File file=new File("aaa.txt");
私はプログラムBufferedReader
で見ましたInputStreamReader
が、含まれていましたが、これを簡単な例で説明できますか?私はファイル処理について多くのサイトで読みましたが、それでも混乱します!!!!
ファイルでいくつかの操作を行おうとすると、コードは次のようになります。
File file=new File("aaa.txt");
私はプログラムBufferedReader
で見ましたInputStreamReader
が、含まれていましたが、これを簡単な例で説明できますか?私はファイル処理について多くのサイトで読みましたが、それでも混乱します!!!!
クラスは基本的に、ファイルのFile
ハンドルを取得できるファイル記述子ですが、それ自体にはファイルから情報を読み取るメソッドはありません。
ここで のInputStreamReader
出番です。 An InputStreamReader
(およびより簡単にはそのサブクラスのFileReader
) が読み取りを行います (他の方法もありますが、これが最も簡単な方法の 1 つです)。
はBufferedReader
をラップしInputStreamReader
、ファイルをバッファーに読み取ります (読み取り呼び出しのたびにバイトを単純に変換して返すのではなく)。これにより、データをより簡単に読み取ることができます。
public void printFileContentsToConsole(final String aFileName) {
//Make a new file.
File file = new File(aFileName);
//Declare the reader outside the scope so we can use it
//in the finally block.
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String line;
//Read one line at a time, printing it.
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
//Try to close it, this might throw an exception anyway.
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
明らかに、BufferedReader APIとFileReader API を見れば、これらの特定のクラスに関する多くの質問に答えることができます。
BufferedReader を使用する理由を明確にするために、ポイントはファイルを 1 行ずつ効率的に読み取ることです。
ディスクからファイルを読み取る方法は次のとおりです。
たとえばFileNotFoundExceptionの場合、すべてのコードをtry/catchステートメント内に配置する必要があることに注意してください。
try
{
//You first have to create a reader that will be used to access the file.
//You create the BufferedReader from a FileReader, and you only need to specify
//the address of the file on your disk.
BufferedReader br = new BufferedReader(new FileReader("fileURL"));
String s;
//The BufferedReader has a method "readLine" that reads the file line by line
//When the reader reaches the end of the file, the method readLine returns null,
//so you can control if there is some data remaining or not.
while( (s = br.readLine()) != null )
{
System.out.println(s);
}
//Don't forget to close the reader when the process is over.
br.close();
}
catch(Exception e)
{
// Do some stuff
}
私が覚えているように、クラスBufferedReaderaFileReaderはパッケージjava.ioにあります。
私の意見では、これはJavaでファイルを読み取る最も簡単な方法です。ファイルの書き方を知る必要がある場合は、プロセスはほとんど同じなので、アドバイスも提供できます。
お役に立てれば。
この基本的なチュートリアルを見てください
基本的にBufferedReader
は、ファイル情報を読み取ることです。それを行うには複数の方法があり、実際にはニーズによって異なります。
基本的に、java.io.File クラスはファイル システム内のファイルを表しますが、それらを操作するメソッドは含まれていません (作成または削除以外)。
それらを使用する必要がある場合は、java.io パッケージの他のクラスを使用します。その中には BufferefReader と InputStreamReader がありますが、FileInputStream のようなものもあります。
実行する操作に応じて、リーダーまたはストリームを使用できます (「リーダー」または「ライター」で終わるクラスはテキスト コンテンツ用であり、「ストリーム」で終わるクラスはバイナリ コンテンツ用ですが、もちろんいつでも、テキストをバイナリとして読み書きする)。
ほとんどの場合、作業を実行するために、これらのクラスのいくつかを「連鎖」する必要があります。ほとんどの場合、非常によく似たコードをソケットに書き込むことができることに注意することも重要です。
単純な例は次のとおりです。
package demo;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
public class ReadLines {
public static void main( String [] args ) throws IOException {
File toRead = new File( args[0]);
if( toRead.exists() ) {
List<String> lines = readLines( toRead );
} else {
System.out.println( toRead.getName() + " doesn't exists" );
}
}
private static List<String> readLines( File fromFile ) throws IOException {
BufferedReader reader = null;
List<String> lines = new ArrayList<String>();
try {
reader = new BufferedReader( new FileReader( fromFile ) ); // chaining
String line = null;
while( ( line = reader.readLine() ) != null ) {
lines.add( line );
}
} finally {
// always close the file
if( reader != null ) try {
reader.close();
} catch( IOException ioe ) {
// it's ok to ignore an exception while closing a file
}
}
return lines;
}
}
このコードがあなたにとってより明確になり、コンパイルされることを願っています(:PIには手元にコンパイラがありません)
以下も参照してください。
http://download.oracle.com/javase/tutorial/essential/io/ http://download.oracle.com/javase/6/docs/api/java/io/package-summary.html http://download .oracle.com/javase/6/docs/api/java/io/Reader.html http://download.oracle.com/javase/6/docs/api/java/io/Writer.html http://download .oracle.com/javase/6/docs/api/java/io/InputStream.html http://download.oracle.com/javase/6/docs/api/java/io/OutputStream.html
わかりやすくするために、InputStreamReader.javaの javadoc から引用
InputStreamReader は、バイト ストリームから文字ストリームへのブリッジです。指定された文字セットを使用して、バイトを読み取り、文字にデコードします。[...] InputStreamReader の read() メソッドのいずれかを呼び出すたびに、基礎となるバイト入力ストリームから 1 つ以上のバイトが読み取られる場合があります。 バイトから文字への効率的な変換を有効にするために、現在の読み取り操作を満たすために必要なバイト数よりも多くのバイトが、基礎となるストリームから先読みされる場合があります。
最高の効率を得るには、 InputStreamReader を BufferedReader 内にラップすることを検討してください。例えば:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));