在try块上获取非法类型的启动

时间:2013-11-20 17:49:24

标签: java try-catch bufferedreader

所以我试图让一个基本的读者去,以便我以后可以使用文件进行身份验证过程。

我遇到的问题是我的BufferedReader行出错,导致我的try函数抛出一个非法的启动异常,它不会运行。 Eclipse在br声明结尾处显示了分号的错误,并说我应该放一个{但我不明白为什么那是必要的。

BufferedReader br = new BufferedReader(new FileReader("Assign4.txt"));

我试图把它放在那里,但它打破了整个尝试部分。

package main;

import java.io.*;

public class file_interface
{
    BufferedWriter wr = new BufferedWriter(new FileWriter("target.txt"));
    BufferedReader br = new BufferedReader(new FileReader("Assign4.txt"));

        try 
        {
            int count = 1;  
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();            
            while (line != null) 
            {
                sb.append(count++);
                sb.append(line);
                sb.append("\n");
                wr.write(line);
                line = br.readLine();    
            }
        } 
        catch (IOException e) 
        {
            System.err.println("Error: " + e);
        }

        finally
        {
            br.close();
            wr.close();
        }
}
}

1 个答案:

答案 0 :(得分:4)

任何Java句子都必须在方法内。这段代码不是。

BufferedWriter wr = new BufferedWriter(new FileWriter("target.txt"));工作的事实是因为在file_interface类中声明为default field(没有给出范围标记)并且正在初始化。它类似于:

public class file_interface {
    BufferedWriter wr;
    public file_interface() {
         wr = new BufferedWriter(new FileWriter("target.txt"));
    }
}

只需创建一个方法来保存逻辑:

public class file_interface {
    public void foo() {
        //your code goes here...
        //now this is not a field but a variable in the method
        BufferedWriter wr = new BufferedWriter(new FileWriter("target.txt"));
        BufferedReader br = new BufferedReader(new FileReader("Assign4.txt"));
        //rest of your code...
        try  {
             //...
        } catch (...) {
             //...
        }
        //...
    }
}

然后在您的客户端类中调用您的方法。例如,使用main方法的类:

public class AMainClass {
    public static void main(String[] args) {
        file_interface fi = new file_interface();
        fi.foo();
    }
}

另一个例子,一个用另一个方法的类:

public class SomeClientClass {
    public void bar() {
        file_interface fi = new file_interface();
        fi.foo();
    }
}

注意:您还应该遵循Java命名约定,因此您应该file_interfaceFileInterface重命名MyFileUtil,因为interface字听起来更多声明,嗯,interface