- PR -

ファイルに文字が書き込まれない

投稿者投稿内容
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-01 17:07
アドバイスありがとうございます。
引用:

Tomcat6.0ということはJDKは5以降ですよね。
FileWriterはファイルが無ければ作成しようと試みます。
application.getRealPathで取得したパスを表示してみたらどうでしょう?
思っていたところと別のところが指し示されたりしていませんか?


かつのりさんとsatomiさんがおっしゃるようにファイルが無い場合は自動的に作られますね。
という事は、エラーが出ないという事なんでしょうか。
後、結果は間違いないパスが表示されました。
コード:

C:\Documents and Settings\PC-User\workspace\JSuper\test.txt


ここでパスを貼り付けてもsatomiさんには意味がありませんが、最後のエラー情報と見比べて頂きたいので書きました。
何かアホなファイル名なので恥ずかしいですね。
最後にデューンさんへ、
引用:

Readerの方に存在しないはずのファイル名を指定した場合はエラーが起きますか?


存在しないファイルを指定した場合はこんな感じです。
長いのですが、一応全部貼り付けて見ますね。

type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException: An exception occurred processing JSP page /FileReader.jsp at line 11
8: </head>
9: <body>
10: <%
11: FileReader fr = new FileReader(application.getRealPath("foo.txt"));
12: int i = 0;
13: while ((i = fr.read())!= -1) {
14: out.println((char)i);
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:404) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
原因
java.io.FileNotFoundException: C:\Documents and Settings\PC-User\workspace\JSuper\foo.txt (指定されたファイルが見つかりません。)
java.io.FileInputStream.open(Native Method)
java.io.FileInputStream.<init>(Unknown Source)
java.io.FileInputStream.<init>(Unknown Source)
java.io.FileReader.<init>(Unknown Source)
org.apache.jsp.FileReader_jsp._jspService(FileReader_jsp.java:63) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

何とかなりませんでしょうか。
再度どうぞ宜しくお願い致します。

[ メッセージ編集済み 編集者: dejavu 編集日時 2009-04-01 18:16 ]
すぷりんぐ
会議室デビュー日: 2006/11/09
投稿数: 7
投稿日時: 2009-04-01 17:47
こんにちは。

とりあえず問題の切り分けをする為にapplication.getRealPathを使用せずテキストファイルまでの絶対パスを書かれてはいかがでしょうか?(FileWriter.jspとFileReader.jsp両方で)
"c:\text.txt"とか半角スペースが含まれていないのがよいかと思われます。

これで書き込まれるようなら少なくとも「ファイルに文字が書き込まれない」という事象からは進むと思うのですが。
satomi
会議室デビュー日: 2008/06/11
投稿数: 12
投稿日時: 2009-04-01 17:57
引用:

という事は、エラーが出ないという事なんでしょうか。


はい、生成に成功すればエラーは出ません。

とりあえず思いつくのは、eclipseで確認しているため、キャッシュされている内容を見ていたとか・・・・
だとしたら、右クリックしてrefresh("更新(F5)"とかになっているかも)すればローカルファイルシステムと同期してくれます。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-04-01 18:00
C:\Documents and Settings\PC-User\workspace\JSuper\test.txt
C:\Documents and Settings\PC-User\workspace\JSupert\foo.txt

JSuperとJSupert で末尾のtが違いますが、typo(タイプミス)ですか?


typoだとして、FileWriter.jspで出力した後、FileReader.jspを実行すると見える(エラーにならない)とのことですので、それは出力できているということになるかと思います。
(以下を現象を前提に話しています。)
引用:

ステップ1.FileWriter.jspで書き込む。
ステップ2.test.txtには何も書き込まれていない。
ステップ3.FileReader.jspで読み込むと書き込んだ文字が表示される。





FileWriter.jsp実行後に
C:\Documents and Settings\PC-User\workspace\JSupert\
フォルダ内のテキストファイルは「ファイルが存在し空」の状態でしょうか?


だとすれば、なにかの弾みで間違えてもう一度開けてしまっている可能性とか・・・

確認用の対処として
FileWriterのコンストラクタの第二引数 boolean append をtrueでやってみるとか

fw.closeの直後で自分で例外throwして無理矢理処理を中断させて、ファイルを確認してみるとか・・・。


dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-01 18:20
デューンさん、大変失礼致しました。
自分のファイル名を出すのが恥ずかしかったので、その部分は問題ないと思い、1度変えてまた考え直して戻したんですね。
いろいろと考えて下さっているのにそんな小さな事で誤解を招き、本当に大変申し訳ありませんでした。
何とお詫びしていいのか分かりません。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-01 20:13
まず、今回アドバイスを頂いた方々(Pucciさん、かつのりさん、satomiさん、デューンさん、すぷりんぐさん)へ
まずお詫びします。
大変申し訳ありませんでした。
また『基礎から』とか『基本から』とか言われるのが嫌でEclipseをどういう風に使っているのか、を書かなかったのですが、書く必要ができました。
まずTomcat6.0サーバーを作りまして動的オブジェクトJSuperプロジェクトのWebContentフォルダ直下にJSPファイルを置きました。
その次に同じフォルダ内にファイルを選択してTest.txtを作りました。
それで、FileWriter.jspをサーバーから実行してから、Test.txtをダブルクリックで表示させたところ真っ白でした。
なので、何も書き込まれていないと思いました。というより、思い込みました。
それで、こちらで質問し、沢山の方々からアドバイスを頂きました。
それと、かつのりさん、satomiさんが『ファイルが無ければ新しく生成される』と言われてたんですけど、WebContentには追加されなかったので『おかしいな』とは思ったんですね。
それと、最近なのですが、WebContent直下のJSPファイルが削除できなくなりまして、これと関係があるのかな、とも思ったのですが。
それで、確認のためにフォルダを開いたらそのファイルが作成されていたんですね。
そのときにTest.txtを見たら、言葉が書かれているんですね。
でも、Eclipseからダブルクリックで開くと真っ白で『何だろう』と思ったんですね。
それで今ですね。
特定の文字を書いて、FileWriter.jspをサーバーで実行し、WebContenフォルダ直下にある元のtest.txtを開いたら、その文字が書かれていました。
なので、最初からtest.txtには書き込まれたんですね。
そこで、test.txtをサーバーで実行すると文字が書き込まれました。
削除ができない事と言い、Eclipseが何かおかしいみたいなんですけど、問題は解決しました。
皆様には大変なご迷惑をおかけしまして、申し訳ありませんでした。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-02 03:17
お詫びと謝罪をした上で、質問があります。

・何でJSPファイル(HTMLファイルも含めて)を削除できないのでしょうか。
・何でtxtファイルをダブルクリックで開いても中身が表示されないのでしょうか。
・上記の2つの質問はEcilpseのどこかに異常があるからでしょうか。

どうぞ宜しくお願い致します。
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-04-02 10:46

消せないと言うのはわかりません。権限変えてしまったとかでは?


多分動いてると思っている場所とデプロイ先が違うんだと思います。
(最初からそこも疑ってましたが。)
たとえばうちではプロジェクト名dwebをdynamic web projectで、
Serverの設定でServer Locationをworkspace metadataにしてますんで

C:\myname\projectFiles\java\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\dweb

がデプロイ先です。
でもワークスペースの場所は
C:\myname\projectFiles\java\workspace\
です。

どういう設定か、どういうプラグインかにもよってきますが、
eclipseがtomcatに対してどういう設定をしているかも軽く認識したほうがいいかもしれません。

スキルアップ/キャリアアップ(JOB@IT)