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 对象。fis.close()、dis.close()、br.close() 都给我找不到符号,即使我导入了所有 I/O 库 (import java.io.*;) 并启动了所有对象。

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中,以便您的 finally 块可以看到变量。

于 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

您的对象在您的块内为空

FileInputStream fis =null;
DataInputStream dis null;

像这样在块外定义它们

try{

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

   }
于 2013-03-07T21:01:48.263 回答
0

您已将范围限定fis在 try 块内,因此 final 不知道它在那里。尝试:

FileInputStream fis;
DataInputStream dis;
try
    {
        fis = new FileInputStream(FileName);
        dis = new DataInputStream(fis);
        br = new BufferedReader(new InputStreamReader(dis));
    }
于 2013-03-07T21:01:56.057 回答
0

尝试这个:

BufferedReader br = null;
FileInputStream fis = null;
DataInputStream dis = null;
try
{
    fis = new FileInputStream(FileName);
    dis = new DataInputStream(fis);
    br = new BufferedReader(new InputStreamReader(dis));
}
于 2013-03-07T21:02:06.123 回答