代码在 Main 方法中运行良好,但是当我尝试提供它自己的方法时,我在调用方法时遇到关于异常的编译器错误

Code Works Well in Main Method but When I Try to Give Its Own Method I Get Compiler Error in Regards to IOExceptionWhen Calling the Method

我提前感谢大家看这个,希望这是一个容易回答的问题。我正在学习 Java 并在互联网上从 http://code.runnable.com/Uu83dm5vSScIAACw/download-a-file-from-the-web-for-java-files-and-save

找到了一段很酷的代码

我修改它基本上调出一个Google静态地图然后保存为jpg。使用此代码,它可以完美运行

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;


public class DownloadFile2 {

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

         String fileName = "mapimg.jpg"; //The file that will be     saved on your computer
         URL link = new     URL("http://maps.googleapis.com/maps/api/staticmap?    center=44.667066,+-90.173632&zoom=13&scale=false&size=600x300&maptype=roa    dmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xff0000%7Cl    abel:0%7C44.667066,+-90.173632"); //The file that you want to download

     //Code to download
         InputStream in = new BufferedInputStream(link.openStream());
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         byte[] buf = new byte[1024];
         int n = 0;
         while (-1!=(n=in.read(buf)))
         {
            out.write(buf, 0, n);
         }
         out.close();
         in.close();
         byte[] response = out.toByteArray();

         FileOutputStream fos = new FileOutputStream(fileName);
         fos.write(response);
         fos.close();
     //End download code

         System.out.println("Finished");

    }

}

现在这段代码在 main 方法中运行良好。我想做的是将它放在自己的方法中,然后从 main 方法中调用它,如下所示:

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;


public class DownloadFile3 {

    public static void main(String[] args)
    {
        getMap();
    }

    public static void getMap() throws IOException
    {        
         String fileName = "mapimg.jpg"; //The file that will be     saved on your computer
         URL link = new     URL("http://maps.googleapis.com/maps/api/staticmap?    center=44.667066,+-90.173632&zoom=13&scale=false&size=600x300&maptype=roa    dmap&format=png&visual_refresh=true&markers=size:mid%7Ccolor:0xff0000%7Cl    abel:0%7C44.667066,+-90.173632"); //The file that you want to download

     //Code to download
         InputStream in = new BufferedInputStream(link.openStream());
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         byte[] buf = new byte[1024];
         int n = 0;
         while (-1!=(n=in.read(buf)))
         {
            out.write(buf, 0, n);
         }
         out.close();
         in.close();
         byte[] response = out.toByteArray();

         FileOutputStream fos = new FileOutputStream(fileName);
         fos.write(response);
         fos.close();
     //End download code

         System.out.println("Finished");

    }

}

没有 getMap() 也能正常编译;在 main 方法中,但是当我调用该方法时,出现以下编译器错误,"DownloadFile3.java:13: error: unreported exception IOException; must be caught or declared to be thrown"

我尝试过使用 try 和 catch 语句,并且研究了好几天。我真的被这个难住了,我猜这对这里更有经验的程序员来说可能是显而易见的。为什么我可以让它在 main 方法中正常工作,但在它自己的方法中它不会工作并给我错误消息?我是在错误地调用该方法还是发生了什么?感谢您对此提供的任何帮助。

您在这里有几个选择。要么...

public static void main(String[] args) throws IOException
{
    getMap();
}

public static void main(String[] args)
{
    try {
        getMap();
    } catch (IOException ioe) {
        // do stuff
    }
}

或捕获并处理 getMap() 方法本身中的任何异常。我个人的选择是第二个或第三个选项;我不喜欢 mainthrows 子句。

我在 intelliJ idea 中尝试了以下代码片段,它编译得很好。它抛出了 IOException,这没关系,因为我从服务器收到了 400 响应代码。

public static void main(String[] args)
{
    try {
        getMap();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

还有一种可能:

public static void main(String[] args) throws IOException {
    getMap();
}

两者都在我的笔记本电脑上正确编译。