- ベストアンサー
エラー処理について
ファイルを引数に取って、そのファイルの中身を文字列として返す自作メソッドをウェブで見つけたので、そのまま使用しようと思いました。しかし、ファイルが空ファイルの場合はこのメソッドだとエクセプションエラーになってしまうようです。どこかを変更して、メイン側で適切に処理してあげなければならないと思われるのですが、どこをどう修正すればよいでしょうか。自分で作成したものでもないので、見当がつかない状態です。。申し訳ありませんが宜しくお願いします。 public static String fileToString(File file) throws IOException { BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); StringBuffer sb = new StringBuffer(); int c; while((c=br.read())!=-1) { sb.append((char) c); } return sb.toString(); } finally { br.close(); } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>このメソッドだとエクセプションエラーになってしまうようです >どこかを変更して、メイン側で適切に処理してあげなければならないと思われるのですが、どこをどう修正すればよいでしょうか これは、ちょっと変だろう。 Exceptionが発生するのを「問題だ、メソッドを修正しないと」と考えているようだが、そもそもこのメソッドは、「問題が発生した場合、Exceptionを送り返すように設計されているもの」だ。外部から利用されることを前提に設計されたメソッドとしては正しいありかただし、メソッドを修正してしまったら、わざわざthrows IOExceptionするように設計してあるメソッドの意味がなくなる。 メソッドは一切修正せず、使うときに、 try { fileToString("hogehoge"); catch(IOException e){ //対処を記す } というような形で対応するのが普通だろう。
その他の回答 (1)
- ProKaseifu
- ベストアンサー率51% (98/192)
public static String fileToString(File file) throws IOException { ここにファイル存在チェックを追加して適当な戻り値を返す。 BufferedReader br = null; --- 略 --- file.exists() で存在チェックができます。(戻り値falseならばファイルがない) 詳しいことはJavaAPI参照してください。
お礼
file.exitsts()やってみました。正しく動作しました。有り難うございました。
お礼
なるほど。IOExceptionの意味がきちんとわかっておりませんでした。メイン側でcatchを記述し、そちらで対処するように修正しました。有り難うございました。