【问题标题】:Getting Illegal start of type on try block在尝试块上获得非法类型的开始
【发布时间】:2013-12-04 21:00:04
【问题描述】:

所以我试图让一个基本的阅读器运行起来,以便以后可以处理文件以进行身份​​验证过程。

我遇到的问题是我的 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();
        }
}
}

【问题讨论】:

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

标签: java try-catch bufferedreader


【解决方案1】:

任何 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_interface 重命名为 FileInterface 甚至 MyFileUtil,因为 interface 这个词听起来更像是声明一个,嗯,interface

【讨论】:

  • 或在静态块内。
  • 也许foo 更好的建议是main 方法(除非foo 返回一些东西)。无论如何+1。
  • @atk 如果你想在你的脚下射击,那就太好了。
  • @atk 你可以并不意味着你应该这样做。
  • 对于基本上是复制文件的 OP 应用程序,静态块不是合适的解决方案。静态块是您有时可以做的一件好事,但不能回答这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 2018-06-04
  • 2014-02-08
  • 2019-02-12
相关资源
最近更新 更多