質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

773閲覧

ファイルが見つからないときに切断せずにエラー分を出したい。

shou_hitotose

総合スコア66

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/12/22 06:25

編集2018/12/22 07:56

Java初心者です。Webサーバもどきを作ろうと思っています。それで講師の方から雛形のプログラムを頂いたのですが現在だと指定したファイルがみつからなかったときにいきなり回線を切断するという乱暴なプログラムになってしまっています。ちゃんとエラーコードとして "HTTP/1.0 404 NotFound\r\n\r\n" のようなものを返すようにしたいのですがプログラムをどのようにかえればよろしいでしょうか。
意見をいただけると幸いです。

Java

1 import java.io.*; 2 import java.net.*; 3 4 public class rp9_2 { 5 public static void main(String args[]) { 6 try{ 7 ServerSocket ss = new ServerSocket(12354); 8 while(true) { 9 Socket s = ss.accept(); 10 InputStream instream = s.getInputStream(); 11 InputStreamReader isreader = new InputStreamReader(instream); 12 BufferedReader bfreader = new BufferedReader(isreader); 13 14 String theLine; 15 theLine = bfreader.readLine(); 16 theLine = theLine.substring(theLine.indexOf(" ")+1); 17 theLine = theLine.substring(0,theLine.indexOf(" ")); 18 theLine = theLine.substring(theLine.indexOf("/")+1); 19 System.out.print("filename: " + theLine + "\n"); 20 File theFile = new File(theLine); 21 if( theFile.exists() == false ) { 22 System.err.print("File does not exist:" + theLine + "\n"); 23 s.close(); 24 continue; 25 } 26 FileInputStream finstream = new FileInputStream(theFile); 27 InputStreamReader fisreader = new InputStreamReader(finstream); 28 BufferedReader fbfreader = new BufferedReader(fisreader); 29 30 OutputStream outstream = s.getOutputStream(); 31 OutputStreamWriter oswriter = new OutputStreamWriter(outstream); 32 BufferedWriter bfwriter = new BufferedWriter(oswriter); 33 PrintWriter pwriter = new PrintWriter(bfwriter); 34 35 pwriter.print("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n"); 36 do { 37 theLine = fbfreader.readLine(); 38 if( theLine != null ) { 39 sleep(100); 40 pwriter.println(theLine); 41 pwriter.flush(); 42 } 43 } while( theLine != null ); 44 45 pwriter.flush(); 46 pwriter.close(); 47 } 48 } catch (Exception e) { 49 System.err.print(e); 50 } 51 } 52 53 static void sleep(long msec) { 54 try{ 55 Thread.sleep(msec); 56 }catch(InterruptedException ie) { 57 } 58 } 59 } 60 61

Web上にあるHTMLファイル(このHTMLファイルは身バレする可能性があるので伏せます。すみません)をjava ex_1 'URL'と入力し保存。
Linuxを用意しました。またプログラムをよんでBufferdreader,InputStreamreaderなどの語句を調べましたがうまく理解することができませんでした。テキストをまとめて読むというらしいのですがじゃあなんのテキストを?となってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/22 06:44

なぜ、その講師に聞かないのでしょうか。
shou_hitotose

2018/12/22 06:46

実は講師の方が「教えない主義」の方で自分でいろいろと考えたりした方が伸びるという考え方を持っており聞いたとしても答えてくれないのです。答えをはぐらかされたりしてしまいます。
shou_hitotose

2018/12/22 06:46

もちろん聞いているのですが「がんばって考えて」の一点張りなので・・
m.ts10806

2018/12/22 06:52

じゃあ聞かずに頑張らないと期待を裏切ることになりますし、自分の身にもなりませんね。 他人にもらった答えで実現できたとしてその講師が期待するような成長ができるでしょうか。 講師の人の立場にたって考えてみてください。
shou_hitotose

2018/12/22 06:58

mts10806さんの言いたいことは重々承知しております。ただがんばってもできないから聞いているのです。これでも2週間ほど頑張っていたのですが埒が明かなかったものでして今回質問させていただきました。
m.ts10806

2018/12/22 07:00

であれば、なおさら、その2週間頑張ってやってみた内容を記載された方が良いです。何も考えずに試さずにただ過ごしたわけではないでしょうから。今の内容だと考えた感じも試した感じもないので丸投げに思えてしまいます。
shou_hitotose

2018/12/22 07:14

なるほどです。ただなんの進展もなく何がどうなったかよくわからない状態なんですよね
m.ts10806

2018/12/22 07:17

質問は編集できるので自分なりにやってみたこと試したことを書いてみてください。 既に回答はついてしまっていますが、もし考えたことやってみたことと同じような内容があれば回答が一部でも無駄になってしまうことにもなります。 また、調べたこともあるでしょうし、もしかしたらその中に求める解決策があったかもしれません。でもそれは質問内容に挙がってきていないと誰も知る術はありません。
shou_hitotose

2018/12/22 07:30

少し加えましたけどこれだけでも違うのでしょうか?
m.ts10806

2018/12/22 07:35

違うというか、何も具体的でないというか、状況が伝わらないというか。 「調べました」だけだと何をどう調べたか分かりませんし、何を試したか分かりません。その結果どうだったかとか。 たぶん講師の方も「質問したいならもっと具体的な内容にしてね」と言いたいのだと思います。 逆の立場になってみてください。「調べたけど分かりませんでした」だけ言われても困りません?見ているこちらの方もまさに同じ気持ちです。 講師からもらったプログラムをそのまま横流しで丸投げしているように感じています。丸投げで低評価をして静観、または放置するのは簡単ですが、なんとなく勿体ない気がしてここまで突っ込んでいます。
shou_hitotose

2018/12/22 07:39

ああすみません。ありがとうございます。別に見捨てられるのは慣れているので見捨ててもいいですよ。 これ以上あなたの時間を割くのも悪い気がしますので、なんか今までありがとうございました。とりあえず質問を編集してみたいと思います。
guest

回答1

0

ベストアンサー

いくつか方法があります。

1.スタックトレースを出力

e.printStackTrace();

とすると、

class.Hoge( oo.class.13 )

みたいなエラーが出ます。まあ、これは少し希望とは違うものですが。

2.再スローする
main関数に

throws スローする例外

を追加して、

throw new スローするException( "めっせーじ" );

とすると、好きなメッセージが出力できます。

3.print

System.err.print();

を使用しているようですが、これは自由に出力できます。

System.err.println( "HTTP/1.0 404 NotFound\r\n\r\n" );

みたいに。ただし、他のOSでも使用する場合、

System.err.println( "message" ); System.err.println();

みたいにしたほうが対応が簡単です。

また、Exceptionが複数スローされる可能性がある場合、面倒でも

try{ }catch( FileNotFoundException fnfe ){ }catch( IOException ioe ){ }

と分けたほうが、どのエラーがスローされるかわかりやすい、エラーごとに処理を変更できる、というような観点からおすすめです。

投稿2018/12/22 06:42

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shou_hitotose

2018/12/22 06:44

回答ありがとうございます! それではお答えいただいた内容を一つ一つやっていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問