5

マシン内のサーバーの場所の絶対パスを取得するにはどうすればよいですか?

Glassfishサーバーを使用していると仮定すると、以下のようにglassfish docrootの場所の絶対パスを取得する必要があります:

C:\glassfish3\glassfish\domains\domain1\docroot

実行時に、次のような Java io パッケージを使用してその場所にファイルを作成する必要があります。

C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt
4

6 に答える 6

5

GlassFish を使用して GlassFish を起動する場合、つまり使用するasadmin start-domain|start-instance場合は、次の鉄壁の保証を提供します。

JVM の現在の作業ディレクトリは、ドメインまたはサーバーの構成ディレクトリであることが確実に保証されます。デフォルトの場合は次のようになります。

c:/glassfish3/glassfish/domains/domain1/config

(デフォルトの) docroot に何かを書き込みたい場合は、次のようにします。

File f = new File("../docroot/yourfile");

サーバーを Java で直接起動した場合でも、すべてのシナリオで常に動作することが保証されている別のオプション (例: java -jar glassfish.jar) は、次のようにシステム プロパティの値を使用することです。

File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile");
于 2012-04-19T21:32:48.320 に答える
1

私は同様の問題を抱えていて、使用することになりました

path = getClass().getProtectionDomain().getCodeSource().getLocation()

静的関数のパスが必要だったからです。これは、どこかでWEB-INF/classesディレクトリを指します。これを使用すると、のようなものを指すことができますpath.subString(0,path.indexOf("WEB-INF"))

これに関して私が抱えていた問題の1つは、Eclipseからテストを実行すると、プロジェクトの「ビルド」ディレクトリを指し示していたということです。

于 2012-04-18T06:20:20.183 に答える
1

これが最善の方法かどうかはわかりませんが、私にとってはうまくいきます:)

String path = new File("").getAbsolutePath() + File.separator + "docroot";
于 2012-05-03T14:57:14.863 に答える
0

これは非常に悪い考えです。WARまたはEARファイルで実行している場合、docrootは書き込み可能なファイルシステム上にありません。これが事実であると仮定すると、後で頭痛につながる可能性があります。

サーブレット初期化パラメータなどの別の方法を使用して、書き込み可能なファイルシステムの場所を指定します。

于 2012-04-18T06:39:16.200 に答える
-1

そのためには、完全なパスに行く必要はありません。

デフォルトよりもファイルを作成しているとき、それはROOTあなたのサーバーで作成します

ここにありC:\glassfish3\glassfish\ます。

これがお役に立てば幸いです。

于 2012-04-18T05:51:21.397 に答える