1

请告诉我一些,如何解决这个问题,有时我得到 Filenotfound 异常,有时这段代码工作正常。

下面是我的代码,

public String sendSMS(String data, String url1) {
            URL url;

            String status = "Somthing wrong ";
            try {
                url = new URL(url1);
                URLConnection conn = url.openConnection();
                conn.setDoOutput(true);
                conn.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
                conn.setRequestProperty("Accept","*/*");
                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                wr.write(data);
                wr.flush();

                // Get the response
                try {
                    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                    String s;
                    while ((s = rd.readLine()) != null) {
                        status = s;
                    }
                    rd.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }

                wr.close();

            } catch (MalformedURLException e) {
                status = "MalformedURLException Exception in sendSMS";
                e.printStackTrace();
            } catch (IOException e) {
                status = "IO Exception in sendSMS";
                e.printStackTrace();
            }

            return status;
        }
4

3 回答 3

2

像这样重写,让我知道你是怎么做的......(注意关闭读写流,如果抛出异常,还要清理流)。

public String sendSMS(String data, String url1) {
    URL url;
    OutputStreamWriter wr = null;
    BufferedReader rd = null;

    String status = "Somthing wrong ";

    try {

        url = new URL(url1);
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
        conn.setRequestProperty("Accept","*/*");

        wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        wr.close();

        rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String s;
        while ((s = rd.readLine()) != null) {
            status = s;
        }
        rd.close();                

    } catch (Exception e) {
        if (wr != null) try { wr.close(); } catch (Exception x) {/*cleanup*/}
        if (rd != null) try { rd.close(); } catch (Exception x) {/*cleanup*/}
        e.printStackTrace();
    }    

    return status;
}
于 2013-01-29T13:17:19.880 回答
1

这个问题似乎是已知的,但由于不同的原因,所以不清楚为什么会发生这种情况。

一些线程会建议关闭 OutputStreamWriter 因为刷新它是不够的,因此我会尝试在刷新后直接关闭它,因为您没有在刷新和关闭之间的代码中使用它。

其他线程表明,使用不同的连接(如 HttpURLConnection)可以避免发生此问题(看这里

另一篇文章建议使用 URLEncoder 类的静态方法 encode。此方法接受一个字符串并将其编码为可以放入 URL 的字符串。

一些类似的问题:

可以使用浏览器访问 URL,但仍然可以使用 URLConnection 访问 FileNotFoundException

非标准 HTTP 端口源的 URLConnection FileNotFoundException

URLConnection 抛出 FileNotFoundException

祝你好运。

于 2013-01-29T12:58:02.703 回答
0

当服务器对 HTTP 请求的响应是代码 404 时,它返回 FileNotFoundException。

检查您的网址。

于 2014-01-28T16:12:32.987 回答