- PR -

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

投稿者投稿内容
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2009-04-04 12:37
出来れば手順は箇条書きで書いていただけると有難いです。
自分と同じ現象を起こすのに必要な手順をもらすことなく書いて頂けると手間がはぶけて嬉しいです。

ということで、私の所で以下のような手順でやってみました。
eclipse3.4(日本語化してない)
jdk1.6 u10
Windows Vista Business SP1

1)ファイルが消せない問題について

1.Dynamic Web Projectを作成する。
 プロジェクト名はdeletefileを指定する。
 Target Runtimeには、Apache Tomcat6.0を指定する。

2.WebContentにsample.jspという名前のJSPを作成する。

3.sample.jspの右クリックをしてdeleteを選択する。

4.Are you sure you want to delete 'sample.jsp' from the file system?と表示された
 ダイアログが表示されるのでOKを押す。

5.Project Explorer上からsample.jspが消える。

以上が私の環境で試してうまくいった手順です。
違う場所を教えて下さい。


2)JSPからファイルを書き込んでもeclipse上で見ると空のままになるについて
1.Dynamic Web Projectを作成する。
 プロジェクト名はwritefileを指定する。
 Target Runtimeには、Apache Tomcat6.0を指定する。

2.WebContentにwrite.jspという名前のJSPを作成する。

3.write.jspの中身を以下のようにする。
コード:
<%@ page language="java" contentType="text/html; charset=windows-31j"
    pageEncoding="windows-31j"%>
<%@ page import="java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
<%= application.getRealPath("test.txt") %>
<%
//オブジェクトを生成する
FileWriter fw = new FileWriter(application.getRealPath("test.txt"));
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Hello world");
//オブジェクトを閉じる
bw.close();
fw.close();
%>
</body>
</html>



4.write.jspの右クリックメニューからRun As → Run on Serverを選択してJSPを
 ブラウザで表示させる。

5.以下の内容がブラウザに表示される。
 [ワークスペースへのパス]\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\writefile\\test.txt


ということで、JSPで書き込んだファイルがEclipse上で更新されないのは、そもそも出力先が
プロジェクトのWebContentの下に書いて無いというのがうちでの試験結果でした。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-04 16:59
引用:

eclipseがキャッシュしていると書いておいたのですが、キャッシュの意味がわからなかったのでしょうか?
同期の意味を勘違いしています。
eclipse上でファイルの同期を行っているかということです。
eclipseからファイルの中身を確認する前に、コンテキストメニューからrefleshしてください。
キーボードショートカットであればf5だったかな?


すみません。キャッシュに関しては勉強不足でして、今いろいろと調べてみましたが、eclipseがキャッシュしているという文章の意味が良く理解できていません。
ただ、同期に関しては分かっているつもりです。
後、コンテキストメニューが分からないのですが……できればrefleshの方法について詳細を書いて頂けないでしょうか。
これも手取り足取りになってしまうのでしょうか。
どうぞ宜しくお願い致します。

引用:

ここからは質問です。
ゴミ箱の中に入っている=同期はしている、と判断されたようですがどういう根拠で何と何が同期していると判断したのでしょうか?



物凄い勘違いをしているのではないか、とヒシヒシと感じています。
ご明察かもしれませんが、1番は
引用:

同期せずに削除の場合はeclipseがエラーメッセージを表示したと思います。



これで削除してもエラーメッセージが表示されなかったので、というのが大きいですかね。
後、これは同期と関係あるのか分かりませんが、

引用:

eclipseのプロセス以外からworkspaceのファイルに出力した場合、同期しないとeclipseから参照できません。



これはEclipse以外からFileWriter.jspなどを実行してもEclipseには反映されないという事ですよね。
自分の場合はEclipseで実行すると指定したファイルに文字がファイルに書き込まれました。
ただ、Eclipse上ではダブルクリックして開いても何も書かれておらず、サーバーから実行すると今度は文字が書かれたファイルが表示されました。

こんな感じです。いろいろな意味で知識足らずで大変すみませんでした。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-04 20:05
引用:

出来れば手順は箇条書きで書いていただけると有難いです。
自分と同じ現象を起こすのに必要な手順をもらすことなく書いて頂けると手間がはぶけて嬉しいです。

ということで、私の所で以下のような手順でやってみました。
eclipse3.4(日本語化してない)
jdk1.6 u10
Windows Vista Business SP1

1)ファイルが消せない問題について

1.Dynamic Web Projectを作成する。
 プロジェクト名はdeletefileを指定する。
 Target Runtimeには、Apache Tomcat6.0を指定する。

2.WebContentにsample.jspという名前のJSPを作成する。

3.sample.jspの右クリックをしてdeleteを選択する。

4.Are you sure you want to delete 'sample.jsp' from the file system?と表示された
 ダイアログが表示されるのでOKを押す。

5.Project Explorer上からsample.jspが消える。

以上が私の環境で試してうまくいった手順です。
違う場所を教えて下さい。



違う点
・4に書かれているダイアログボックスが表示されません。
・5のようにファイルがプロジェクト・エクプローラーからは消えずに表示されたままです。
少し前までは削除するとworkspaceにあったファイルはゴミ箱に行きましたが、どういう訳か今ではゴミ箱にも移動しません。

引用:

2)JSPからファイルを書き込んでもeclipse上で見ると空のままになるについて
1.Dynamic Web Projectを作成する。
 プロジェクト名はwritefileを指定する。
 Target Runtimeには、Apache Tomcat6.0を指定する。

2.WebContentにwrite.jspという名前のJSPを作成する。

3.write.jspの中身を以下のようにする。
コード:

<%@ page language="java" contentType="text/html; charset=windows-31j"
pageEncoding="windows-31j"%>
<%@ page import="java.io.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>
<%= application.getRealPath("test.txt") %>
<%
//オブジェクトを生成する
FileWriter fw = new FileWriter(application.getRealPath("test.txt"));
BufferedWriter bw = new BufferedWriter(fw);
bw.write("Hello world");
//オブジェクトを閉じる
bw.close();
fw.close();
%>
</body>
</html>



4.write.jspの右クリックメニューからRun As → Run on Serverを選択してJSPを
 ブラウザで表示させる。

5.以下の内容がブラウザに表示される。
 [ワークスペースへのパス]\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\writefile\\test.txt


ということで、JSPで書き込んだファイルがEclipse上で更新されないのは、そもそも出力先が
プロジェクトのWebContentの下に書いて無いというのがうちでの試験結果でした。


私もKazukiさんのファイルを実行しました。
結果は
コード:

C:\dejavu\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\JSuper\test.txt


でした。
でも、最初の方は問題なく表示されたと書かれていた人もいます。
この状態をどうする事もできないのでしょうか。
デプロイ・パスを変更すればいいんでしょうか。
多分、何訳分からない事言ってるのとか思われているかもしれませんが、サーバーを使用する以上は仕方の無い事なのでしょうか。

[ メッセージ編集済み 編集者: dejavu 編集日時 2009-04-04 22:02 ]
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2009-04-05 00:13
プロジェクトエクスプローラ上の JSuper 配下にある test.txt は何時
どうやって作成された(した)のですか?まさか自分でファイルの追加
とかで作ったわけじゃないよね?

application.getRealPath("test.txt") をやってる限り、この場所に保存されることは
ぜったいありません。

エクスポート・インポートしないで、もう一回WEBプロジェクト作って、でじゃぶー.jsp
だけコピって持ってきてやってみなされ。

>最初の方は問題なく表示されたと書かれていた人もいます。
最初の方は関係ないです。今おこっていることが全て。つっても君が「最初の方」の
方々のアドバイスを曲解しているだけだとは思いますが。

>サーバーを使用する以上は仕方の無い事
ワークスペース直下にファイルが作られるようにするための努力は必要だと
思いますね。
例えば、
でじゃぶー.properties ファイルに、

でじゃぶー.debug = true
でじゃぶー.workpath = C:/workspace/JSuper

と書いておいて、
これを、application.getRealPath の代わりに読み込んで test.txt にくっ付けて
あげるとか、ね。もちろん、でじゃぶー.debug が true の時だけね。

確か、application.getRealPath 使わないでやってあげれば、プロジェクトの
カレントに test.txt が作られるんじゃないかな?


Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2009-04-05 01:20
test.txtは何でWebContentの下に作りたいんですか?
データを引き継いだりしたいという理由なら、SessionやDBに保持させておくのがいいと思います。

削除できない件については、動的Webプロジェクト以外ではどうですか?
うまくいきます?
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-05 02:12
引用:

プロジェクトエクスプローラ上の JSuper 配下にある test.txt は何時
どうやって作成された(した)のですか?まさか自分でファイルの追加
とかで作ったわけじゃないよね?


そうです。自分で作成しました。
引用:

application.getRealPath("test.txt") をやってる限り、この場所に保存されることは
ぜったいありません。

エクスポート・インポートしないで、もう一回WEBプロジェクト作って、でじゃぶー.jsp
だけコピって持ってきてやってみなされ。


とても肝心な事なんですけど、ここでおっしゃられているでじゃぶー.jspとはFileWriter.jspの事で宜しいのですか。
でも、application.getRealPath("test.txt")では保存は不可能なんですよね。

引用:

>最初の方は問題なく表示されたと書かれていた人もいます。
最初の方は関係ないです。今おこっていることが全て。つっても君が「最初の方」の
方々のアドバイスを曲解しているだけだとは思いますが。


ここは何となく分かります。
引用:

>サーバーを使用する以上は仕方の無い事
ワークスペース直下にファイルが作られるようにするための努力は必要だと
思いますね。
例えば、
でじゃぶー.properties ファイルに、

でじゃぶー.debug = true
でじゃぶー.workpath = C:/workspace/JSuper

と書いておいて、
これを、application.getRealPath の代わりに読み込んで test.txt にくっ付けて
あげるとか、ね。もちろん、でじゃぶー.debug が true の時だけね。


正直物凄く難解です。
でじゃぶー.propertiesファイルを作成するのですか。
まず、propertiesファイルについて調べないといけませんね。
dejavu
ベテラン
会議室デビュー日: 2009/03/13
投稿数: 71
投稿日時: 2009-04-05 08:52
引用:

test.txtは何でWebContentの下に作りたいんですか?
データを引き継いだりしたいという理由なら、SessionやDBに保持させておくのがいいと思います。


何か今一しっくり来ないというか、以前はapplication.RealPath("test.txt")のパスの指定先がworkspaceだったんですよね。
コード:
C:/Documents and Settings/PC-User/workspace/JSuper/test.txt


これですよ。だから、まだ直ってない気がするのですかね。
でも、Kazukiさんが証明したとおり、ぴあちゃんの言われるとおり、今の状態が正常なんですよね。
これでいいんですよね。
ちなみに、Kazukiさんはpropertiesファイルとかは興味ないですか。
今一、よく分からなくて何かpropertiesファイル用のエディターがプラグインできるみたいなんですけど、一応インストールしましたが、今一良く分かりません。
あの今、propertiesファイルを調べてる中、混同しそうなのですが、java.util.Propertiesクラスとは別物ですよね。
何かASCUコンバータとか訳分からないのが出てきてパニックに火に油を注いでいる状況です。
何て言えばいいのでしょうか……。
元に戻りたいけど、戻れない……。
やる事は他にも沢山あるので……。
ほとほと困りました。
でも、propertiesファイルも気になるし。
本みたいのが無いと自分には難しい気もするんですよね、思いっきり。
後は、ぴあちゃんさんの次のレス次第ですね。

引用:

削除できない件については、動的Webプロジェクト以外ではどうですか?
うまくいきます?


色々試してみたら、削除は上手くできるようになりました。
原因が何だったのかはよく分かりませんが、一応直ったので一安心ですね。
後は、自分が何をしたいのか、ですよね。
何に向かって走っているのか。
そこにゴールはあるのか、みたいな感じです。
satomi
会議室デビュー日: 2008/06/11
投稿数: 12
投稿日時: 2009-04-05 09:28
1つずつ解決しましょう。

まず、ファイルが書き込まれない件について

コード:
<%= application.getRealPath("test.txt") %>


としている部分で、application.getRealPath("test.txt")が返す文字列を表示しています。
その結果が
C:\dejavu\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\JSuper\test.txt
なのですから、FileWriterクラスで出力されるデータは、上記ファイルに書き込まれます。
メモ帳などで開いて確認してみてください。

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