0

ファイルでいくつかの操作を行おうとすると、コードは次のようになります。

File file=new File("aaa.txt");

私はプログラムBufferedReaderで見ましたInputStreamReaderが、含まれていましたが、これを簡単な例で説明できますか?私はファイル処理について多くのサイトで読みましたが、それでも混乱します!!!!

4

6 に答える 6

5

クラスは基本的に、ファイルのFileハンドルを取得できるファイル記述子ですが、それ自体にはファイルから情報を読み取るメソッドはありません。

ここで のInputStreamReader出番です。 An InputStreamReader(およびより簡単にはそのサブクラスのFileReader) が読み取りを行います (他の方法もありますが、これが最も簡単な方法の 1 つです)。

BufferedReaderをラップしInputStreamReader、ファイルをバッファーに読み取ります (読み取り呼び出しのたびにバイトを単純に変換して返すのではなく)。これにより、データをより簡単に読み取ることができます。

于 2010-10-29T12:57:06.253 に答える
1
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 行ずつ効率的に読み取ることです。

于 2010-10-29T12:54:52.433 に答える
0

ディスクからファイルを読み取る方法は次のとおりです。

たとえば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でファイルを読み取る最も簡単な方法です。ファイルの書き方を知る必要がある場合は、プロセスはほとんど同じなので、アドバイスも提供できます。

お役に立てれば。

于 2010-10-29T13:09:54.357 に答える
0

この基本的なチュートリアルを見てください

基本的にBufferedReaderは、ファイル情報を読み取ることです。それを行うには複数の方法があり、実際にはニーズによって異なります。

于 2010-10-29T12:53:59.580 に答える
0

基本的に、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

于 2010-10-29T13:15:23.527 に答える
0

わかりやすくするために、InputStreamReader.javaの javadoc から引用

InputStreamReader は、バイト ストリームから文字ストリームへのブリッジです。指定された文字セットを使用して、バイトを読み取り、文字にデコードします。[...] InputStreamReader の read() メソッドのいずれかを呼び出すたびに、基礎となるバイト入力ストリームから 1 つ以上のバイトが読み取られる場合があります。 バイトから文字への効率的な変換を有効にするために、現在の読み取り操作を満たすために必要なバイト数よりも多くのバイトが、基礎となるストリームから先読みされる場合があります。

最高の効率を得るには、 InputStreamReader を BufferedReader 内にラップすることを検討してください。例えば:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

于 2010-10-29T13:33:06.180 に答える