2010-11-28 12 views
0

私はテキストファイルからの読み込みの基礎を学んでいます。私はすべてがメインメソッドにある場合、うまく動作するコードを持っています。しかし、この演習では、オープンメソッドとクローズメソッドを別々のメソッドに入れるように求められています。 openメソッドは1つの引数(ファイル名)をとり、closeメソッドは引数をとりません。ファイルのオープンとクローズ - 別個のメソッド

openメソッドは正常に動作します。近い方法は私の問題です。

import java.io.*; 
class EmpInFile 
{ 
    public static void main(String[] args) throws IOException { 
     EmpInFile myFile = new EmpInFile() ; 
     myFile.openFile("payslip.txt") ; 
     myFile.closeFile() ; 
    } // end main 

public void openFile(String filename) throws IOException { 
    String line ; 
    int numLines ; 
    // open input file 
    FileReader reader = new FileReader(filename) ; 
    BufferedReader in = new BufferedReader(reader) ; 
    numLines = 0 ; 
    // read each line from the file 
    line = in.readLine() ; // read first 
    while (line != null) 
    { 
     numLines++ ; 
     System.out.println(line) ; // print current 
     line = in.readLine() ; // read next line 
    } 
    System.out.println(numLines + "lines read from file") ; 
} // end openFile 

public void closeFile() throws IOException { 
    in.close() ; 
    System.out.println("file closed") ; 
    } // end closeFile 
} // end class 

答えて

3

openFilecloseFileにいくつかのデータを共有するには、そのデータをクラスのフィールドとして配置する必要があります。

import java.io.*; 
class EmpInFile 
{ 
    // shared data here. 
    BufferedReader in; 

    public void openFile() { 
    ... set something in "in" 
    } 

    public void closeFile() { 
    ... close "in" 
    } 
+0

彼はオープンメソッドで何かを設定しています。ローカル変数です。それを渡す必要はありません。 – duffymo

+0

こんにちはマーティン、ありがとうございました。今はうまくいっています!あなたの助けをもう一度ありがとう! – raoulbia

2

inをクラスレベルのフィールドにする必要があります。

+0

あなたはクラスからこれを行う方法を知っておくべきです。 – SLaks

4

これは悪いデザインだと思います。あなたのopenFile()メソッドはこれ以上のことをしています。完全な内容を読み込んでコンソールにエコーしています(無駄ですが、それはあなたがやっていることです)。

close()メソッドが提供している値はありません。 Fileを閉じて渡す方がよいでしょう。単純にjava.io.Fileからメソッドをラップするときに何をしましたか?少なくともユーザーがそうする必要がないように例外を処理します。

クラス変数の使用はお勧めしません。あなたのファイルポインタがclose方法で表示されていない

package utils; 

public class FileUtils 
{ 
    public static Reader openFile(String fileName) throws IOException 
    { 
     return new FileReader(new File(fileName)); 
    } 

    public static List<String> readFile(String fileName) throws IOException 
    { 
     List<String> contents = new ArrayList<String>(); 

     BufferedReader br = null; 

     try 
     { 
      br = new BufferedReader(openFile(fileName)); 
      while ((String line = br.readLine()) != null) 
      { 
       contents.add(line); 
      } 
     } 
     finally 
     { 
      close(br); 
     } 


     return contents; 
    } 

    public static void close(Reader r) 
    { 
     try 
     { 
      if (r != null) 
      { 
       r.close(); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

私は完全に同意しますが、あなたの答えは初心者にとっては価値がないと信じています。トピックに載っていない人にはあまりにも秘密です。 –

+0

コードを追加しました - どうですか? – duffymo

+0

IMHOは間違いなく良いです。 –

0

:あなたは多くの有用であろう静的な3つのメソッドを書くことができます。 opencloseメソッドを使用するには、FileReaderをメンバー変数にする必要があります。

0

ここに何かを追加したいだけです。それは応答ではなく、あなたにとって有益な情報です。 BufferedReaderとFileReaderの両方を閉じる必要はありません。 BufferedReaderのどちらかを閉じるだけで十分です。以前の質問は答えましたhere

関連する問題