4

ファイルから整数を読み取り、それらに何らかの操作を適用し、結果の整数を別のファイルに書き込もうとしています。

// Input
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
Scanner s = new Scanner(br);

// Output
FileWriter fw = new FileWriter("out.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);

int i;

while(s.hasNextInt())
{
    i = s.nextInt();
    pw.println(i+5);
}

これらの入力ストリームと出力ストリームをこのようにラップするのは良い習慣ですか?
私はJavaとインターネットが初めてで、ファイル内のI / Oの他の方法をたくさん見ました。私は1つのアプローチに固執したいので、最良のアプローチより上ですか?

4

5 に答える 5

5

- Well consider that you went shopping into a food mall, Now what you do usually, pick-up each item from the selves and then go to the billing counter then again go to the selves and back to billing counter ....?? Or Store all the item into a Cart then go to the billing counter.

- Its similar here in Java, Files deal with bytes, and Buffer deals with characters, so there is a conversion of bytes to characters and trust me it works well, there will not be any noticeable overhead.

So to Read the File:

File f = new File("Path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

So to Write the File:

File f = new File("Path");
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);

And when you use Scanner there is no need to use BufferedReader

于 2012-11-01T09:08:11.713 に答える
3

これらのクラスの設計はDecorator デザイン パターンに基づいていることに注意してください。java.io.Closeableブロック内のすべてのインスタンスを閉じることをお勧めしますfinally。例えば:

    Reader r = null;
    Scanner s = null;
    try {
        r = new FileReader("test.txt");
        s = new Scanner(r);
        // Do your stuff here.
    } finally {
        if (r != null)
            r.close();
        if (s != null)
            s.close();
    }

または、Java 7 以降を使用している場合:

    try (
            Reader r = new FileReader("test.txt");
            Scanner s = new Scanner(r)
            ) {
        // Do your stuff here.
    }
于 2012-11-01T11:27:51.307 に答える
2

を使用して文字データを書き込むBuffredWriter場合は、実際には必要ありません。それ自体を使用してそれを達成することができます。PrintWriterprintwriterfilewriterargumentscannerreadfilebufferedreader

FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
while((line=br.readLine())!=null){
//do read operations here
}

FileWriter fw = new FileWriter("out.txt");
PrintWriter pw = new PrintWriter(fw);
 pw.println("write some data to the file")
于 2012-11-01T08:27:57.617 に答える
2

Scanner は BufferedReader を必要としません。FileReader にラップできます。

Scanner s = new Scanner(new FileReader("test.txt"));

スキャナを使用している間は、ソースにさまざまなコンテンツが含まれていると想定することをお勧めします。使用後はスキャナを閉じてください。

   while(s.hasNext()){

    if(s.hasNextInt())
      int i = s.nextInt();

    s.next();
    }
     s.close();
于 2012-11-01T08:31:57.543 に答える