代码在 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()
方法本身中的任何异常。我个人的选择是第二个或第三个选项;我不喜欢 main
和 throws
子句。
我在 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();
}
两者都在我的笔记本电脑上正确编译。
我提前感谢大家看这个,希望这是一个容易回答的问题。我正在学习 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()
方法本身中的任何异常。我个人的选择是第二个或第三个选项;我不喜欢 main
和 throws
子句。
我在 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();
}
两者都在我的笔记本电脑上正确编译。