1

この問題を解決する方法を教えてください。Filenotfound Exception が発生することがあります。また、このコードが正常に動作することもあります。

以下は私のコードです、

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 クラスの static メソッド encode を使用することを提案しています。このメソッドは文字列を受け取り、それを URL に挿入できる文字列にエンコードします。

いくつかの同様の質問:

URL はブラウザでアクセスできますが、それでも URLConnection で FileNotFoundException が発生します

非標準 HTTP ポート ソースの URLConnection FileNotFoundException

FileNotFoundException をスローする URLConnection

幸運を願っています。

于 2013-01-29T12:58:02.703 に答える
0

HTTP リクエストに対するサーバーの応答がコード 404 の場合、FileNotFoundException を返します。

URL を確認してください。

于 2014-01-28T16:12:32.987 に答える