有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java错误:未报告的异常FileNotFoundException;必须被抓住或宣布被抛出

我正在尝试创建一个简单的程序,将字符串输出到文本文件。使用我在这里找到的代码,我将以下代码组合在一起:

import java.io.*;

public class Testing {

  public static void main(String[] args) {

    File file = new File ("file.txt");
    file.getParentFile().mkdirs();

    PrintWriter printWriter = new PrintWriter(file);
    printWriter.println ("hello");
    printWriter.close();       
  }
} 

J-grasp向我抛出以下错误:

 ----jGRASP exec: javac -g Testing.java

Testing.java:10: error: unreported exception FileNotFoundException; must be caught or declared to be thrown
    PrintWriter printWriter = new PrintWriter(file);
                              ^
1 error

 ----jGRASP wedge2: exit code for process is 1.

因为我对Java相当陌生,我不知道这意味着什么。谁能给我指出正确的方向吗


共 (4) 个答案

  1. # 1 楼答案

    如果文件有问题,PrintWriter可能会抛出异常,比如文件不存在。所以你必须加上

    public static void main(String[] args) throws FileNotFoundException {
    

    然后它将编译并使用try..catch子句来捕获和处理异常

  2. # 2 楼答案

    您没有告诉编译器有可能抛出FileNotFoundException 如果文件不存在,将抛出FileNotFoundException

    试试这个

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File ("file.txt");
        file.getParentFile().mkdirs();
        try
        {
            PrintWriter printWriter = new PrintWriter(file);
            printWriter.println ("hello");
            printWriter.close();       
        }
        catch (FileNotFoundException ex)  
        {
            // insert code to run when exception occurs
        }
    }
    
  3. # 3 楼答案

    如果您对Java非常陌生,只是想学习如何使用PrintWriter,下面是一些简单的代码:

    import java.io.*;
    
    public class SimpleFile {
        public static void main (String[] args) throws IOException {
            PrintWriter writeMe = new PrintWriter("newFIle.txt");
            writeMe.println("Just writing some text to print to your file ");
            writeMe.close();
        }
    }
    
  4. # 4 楼答案

    这意味着当你调用new PrintWriter(file)时,当你想写入的文件不存在时,它会抛出一个异常。因此,您要么需要处理该异常,要么让代码重新抛出该异常,供调用方处理

    import java.io.*;
    
    public class Testing {
    
        /**
         * This writes a string to a file.
         * If an exception occurs, we don't care if nothing gets written.
         */
        public void writeToFileWithoutThrowingExceptions(File file, String text) {
            // Yes, we could use try-with-resources here,
            // but that would muddy the example.
            PrintWriter printWriter;
            try {
                printwriter = new PrintWriter(file);
                printWriter.println(text);
            } catch (FileNotFoundException fnfe) {
                // Do something with that exception to handle it.
                // Since we said we don't care if our text does not get written,
                // we just print the exception and move on.
                // Printing the exception like this is usually a bad idea, since
                // now no-one knows about it. Logging is better, but even better
                // is figuring out what we need to do when that exception occurs.
                System.out.println(fnfe);
            } finally {
                // Whether an exception was thrown or not,
                // we do need to close the printwriter.
                printWriter.close();
            }
        }
    
        /**
         * This writes a string to a file.
         * If an exception occurs, we re-throw it and let the caller handle it.
         */
        public void writeToFileThrowingExceptions(File file, String text) throws FileNotFoundException {
            // We use try-with-resources here. This takes care of closing
            // the PrintWriter, even if an exception occurs.
            try (PrintWriter printWriter = new PrintWriter(file)) {
                printWriter.println(text);
            }
        }
        
        public static void main(String[] args) {
            File file = new File("file.txt");
            file.getParentFile().mkdirs();
    
            // We call the method that doesn't throw an exception
            writeToFileWithoutThrowingExceptions(file, "Hello");
            
            // Then we call the method that _can_ throw an exception
            try {
                writeToFileThrowingExceptions(file, "World");
            } catch (FileNotFoundException fnfe) {
                // Since this method can throw an exception, we need to handle it.
                // Note that now we have different options for handling it, since             
                // we are now letting the caller handle it.
                // The caller could decide to try and create another file, send
                // an e-mail, or just log it and move on.
                // Again, as an example, we just print the exception, but as we
                // discussed, that is not the best way of handling one.
                System.out.println(fnfe);
            }
        }
    }