获取尝试块上类型的非法开头

问题描述 投票:0回答:2

因此,我试图让基本的读者开始学习,以便以后可以使用文件进行身份验证过程。

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

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

我尝试将其放在此处,但它破坏了整个try部分。

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();
        }
}
}
java try-catch bufferedreader
2个回答
4
投票

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

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

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_interface重命名为FileInterface甚至是MyFileUtil,因为interface字听起来更像是声明了interface


0
投票

出现相同的错误,我不知道

© www.soinside.com 2019 - 2024. All rights reserved.