5
public static int howMany(String FileName)
{
    BufferedReader br = null;

    try
    {
        FileInputStream fis = new FileInputStream(FileName);
        DataInputStream dis = new DataInputStream(fis);
        br = new BufferedReader(new InputStreamReader(dis));
    }
    catch (FileNotFoundException e)
    {
        System.out.print("FILE DOESN'T EXIST");
    }
    finally
    {
        fis.close();
        dis.close();
        br.close();
    }


    String input;
    int count = 0;

    try
    {

        while ((input = br.readLine()) != null)
        {
            count++;
        }

    }
    catch (IOException e) 
    {
        System.out.print("I/O STREAM EXCEPTION");
    }


    return count;
}

何らかの理由で、I/O オブジェクトを閉じることができません。すべての I/O ライブラリをインポートし (import java.io.*;)、すべてのオブジェクトを開始したにもかかわらず、fis.close()、dis.close()、br.close() のすべてでシンボルが見つかりません。

4

5 に答える 5

5
 BufferedReader br = null;
 FileInputStream fis =null;
 DataInputStream dis null;
 try {
     fis = new FileInputStream(FileName);
     dis = new DataInputStream(fis);
     br = new BufferedReader(new InputStreamReader(dis));
 }

try blockあなたの最終ブロックが変数を見ることができるように、それらをあなたの外に出してください。

于 2013-03-07T21:01:12.080 に答える
1

ブロックの外側ですべてのストリームを宣言する必要がありtryます。そうしないと、finallyブロック内に表示されません。

FileInputStream fis = null;
DataInputStream dis = null;
BufferedReader br = null;

あるいは、Java 7 の新しいtry-with-resources構文を使用して、リソースのクローズを自動化することもできます。

于 2013-03-07T21:01:34.283 に答える
1

あなたのオブジェクトはあなたのブロック内でnullになっています

FileInputStream fis =null;
DataInputStream dis null;

このようなブロックの外側でそれらを定義します

try{

    fis = new FileInputStream(FileName);
    dis = new DataInputStream(fis);

   }
于 2013-03-07T21:01:48.263 に答える