在 try 块上非法启动类型

Tay*_*lor 2 java try-catch bufferedreader

所以我试图让一个基本的读者开始工作,这样我就可以在以后的身份验证过程中处理文件。

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

BufferedReader br = new BufferedReader(new FileReader("Assign4.txt"));
Run Code Online (Sandbox Code Playgroud)

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

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();
        }
}
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 5

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

有效的事实BufferedWriter wr = new BufferedWriter(new FileWriter("target.txt"));是因为在您的类中被声明为默认字段(没有给出范围标记)file_interface并且正在初始化。它类似于:

public class file_interface {
    BufferedWriter wr;
    public file_interface() {
         wr = new BufferedWriter(new FileWriter("target.txt"));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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 (...) {
             //...
        }
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后只需在您的客户端类中调用您的方法。例如,具有以下main方法的类:

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

另一个例子,一个带有另一个方法的类:

public class SomeClientClass {
    public void bar() {
        file_interface fi = new file_interface();
        fi.foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您还应该遵循 Java 命名约定,因此您应该重命名file_interfacebyFileInterface甚至MyFileUtil因为interface单词听起来更像是声明 an, uhm, interface.