【问题标题】:unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown未报告的异常 java.io.FileNotFoundException;必须被抓住或宣布被抛出
【发布时间】:2011-04-21 19:11:18
【问题描述】:

我正在创建一个类——只是一个类,没有 main(),我在这一行收到“未报告的异常 java.io.FileNotFoundException; 必须被捕获或声明为抛出”的错误:

FileOutputStream outStr = new FileOutputStream(FILE, true);   

我不明白;我放入了一个 try{} catch{} 块,它仍然报告错误。

此外,它还报告了 try 和两个 catch 行的“非法类型开始”,它还说 ';'预计两条捕获线。

我正在使用 NetBean IDE,仅供参考。

感谢您的帮助。

这里是完整的代码:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.FileNotFoundException;


public class UseLoggingOutputStream 
{

    String FILE = "c:\\system.txt";

    try
    {

        FileOutputStream outStr = new FileOutputStream(FILE, true);

    }

    catch(FileNotFoundException fnfe)
    {

        System.out.println(fnfe.getMessage());

    }

    catch(IOException ioe)
    {

        System.out.println(ioe.getMessage());

    }

}

【问题讨论】:

  • 这一行是什么:Logger.getLogger("outLog"), Level.ERROR)));?先修好。
  • 你不需要在代码中最明显的地方放那么多//Begin //End cmets。他们制造的噪音比提供信息的要多。
  • 已修复。我以为我为了这个问题/答案帖子的目的而删除了该行,但我表面上错过了它。我删除了 //Begin 和 //End cmets。谢谢。

标签: java exception try-catch filenotfoundexception


【解决方案1】:

您需要将文件处理语句放在方法中:

import java.io.FileOutputStream;
import java.io.FileNotFoundException;

public class UseLoggingOutputStream {
    public void myMethod() {
        String file = "c:\\system.txt";
        try {
            FileOutputStream outStr = new FileOutputStream(file, true);
        } catch(FileNotFoundException fnfe) { 
            System.out.println(fnfe.getMessage());
        } 
    }
}

【讨论】:

  • 我在 main 中做同样的事情时得到了这个
  • @Ungeheuer 您仍然需要将 FileOutputStream 构造包装在 main 中的 try/catch 块中。或者,您可以声明一个抛出 FileNotFoundException 的方法。
  • 我在 try/catch 中确实有它。最终还是需要使用标准输入,所以就切换到那个。
  • 很高兴您找到了解决方案!如果您想了解最初的问题是什么,请考虑在您的代码中发布问题。
【解决方案2】:

所有功能代码都需要进入方法-我在您的代码中没有看到方法-这是类型问题的非法开始。一旦你掌握了基础知识,其他编译错误应该会变得更清楚。

public class Foo {

  public void doSomething() {
    //code here 
  }

}

【讨论】:

  • 你所有的代码都进去 --> public static void main(String[] args) {
  • 是的,这解决了问题,我想我没有方法。至于 public static void main,我试图创建一个库类。难道库类不需要main方法吗?
  • 在 Java 中,方法是操作单元。除了类或类级别变量中的静态初始化块之外,所有代码都在方法中。你的 main,带有签名的 Ishmael provice,如果这是一个 Java 将直接启动的类,即 java Foo 意味着 Foo 必须有一个 main。具有辅助方法或建模实体的库类不需要 main。
【解决方案3】:

将此代码移至某个方法或至少移至静态初始化程序块。

【讨论】:

    【解决方案4】:
    import java.io.*;
    import java.util.*; 
    
    public class SortNames {
    
    private String[] strings = new String[10];  
    
    private int counter;
    
    public SortNames() {
    
    ArrayList<String> names = new ArrayList<String>();
    Scanner scan = null;
    File f = null;
    
    try{
     f = new File("names.txt");
     scan = new Scanner(f);
    
      while(scan.hasNext()) names.add(scan.next());
    }
      finally{scan.close();}
    
    Collections.sort(names);
    
      for(String s:names) System.out.println(s);
    
         }  
    } 
    

    【讨论】:

      【解决方案5】:

      很抱歉,如果这对您没有帮助,但我能够通过在包含 FileWriter 的方法调用中添加“ throws FileNotFoundException ”来解决这个确切的问题。我知道这可能没有帮助,因为您没有使用方法,但话又说回来,也许是。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多