Java MalformedUrlException

时间:2016-05-25 09:56:08

标签: java exception

我试图从网址下载文件,但如果网址不存在,则表示网站出错。

我的第一个解决方案:

            try {
                saveUrl("temp.pgm",webAdress.getText());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

saveUrl方法:

 public void saveUrl(final String filename, final String urlString)
                throws MalformedURLException, IOException {
            BufferedInputStream in = null;
            FileOutputStream fout = null;
            try {
                in = new BufferedInputStream(new URL(urlString).openStream());
                fout = new FileOutputStream(filename);

                final byte data[] = new byte[1024];
                int count;
                while ((count = in.read(data, 0, 1024)) != -1) {
                    fout.write(data, 0, count);
                }
            } finally {
                if (in != null) {
                    in.close();
                }
                if (fout != null) {
                    fout.close();
                }
            }
        }

如果我在webAdress中放置随机字符串(例如" asdasdasd")异常不起作用,错误是:

java.net.MalformedURLException: no protocol: ghghjghj
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at java.net.URL.<init>(Unknown Source)
    at pl.edu.pwr.pp.LoadActivity.saveUrl(LoadActivity.java:254)
    at pl.edu.pwr.pp.LoadActivity$5.actionPerformed(LoadActivity.java:179)

我尝试了另一种解决方案,但存在同样的问题:

File pathToTmpFile = new File("tmpfile.pgm");                
                            try {
                                FileUtils.copyURLToFile(new URL(webAdress.getText()), pathToTmpFile);
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        pathToTmpFile.delete();

我不知道为什么例外不起作用(如果下载了url退出文件)。

2 个答案:

答案 0 :(得分:0)

  

我不知道为什么例外不起作用

确实有效。用户输入了ghghjghj: ...某些东西,你得到了一个完全合适的例外。

答案 1 :(得分:0)

您必须在MalformedURLException方法中捕获try-catch块内的saveURL,否则您将从saveURL方法移除try-catch块。

尝试以下代码段。

try {
      in = new BufferedInputStream(new URL(urlString).openStream());
      fout = new FileOutputStream(filename);

      final byte data[] = new byte[1024];
      int count;
      while ((count = in.read(data, 0, 1024)) != -1) {
        fout.write(data, 0, count);
      }
} catch(IOException ioe) {
      throw ioe; //Propogation of exception
} finally {
      if (in != null) {
        in.close();
      }

      if (fout != null) {
        fout.close();
      }
}