0

Webアプリケーションに単純なJavaクラスがあり、以下のコードを記述しましたが、機能しません

File test= new File("/templates/xmdForModel.xsd");

テンプレートフォルダは、アプリケーションのルートフォルダ内にあります。

ファイルの場所は---->ファイルのapplication-root/package/test.java
場所は-------->application-root/testRoot/template/xmdForModel.xsd

エラー

1)ドキュメントが見つからなかったため、スキーマドキュメント'file:/templates/xmdForModel.xsd'の読み取りに失敗しました。2)ドキュメントを読み取ることができませんでした。3)ドキュメントのルート要素はではありません。

4

2 に答える 2

1

Web アプリケーション内のファイルのファイル名を調べたい場合は、ServletContext#getRealPathを使用できます。

ただし、 Class#getResourceAsStreamでクラスローダーを使用してリソースをロードすることをお勧めします。このようにして、ファイルが実際にはファイルとして存在しない場合でも機能します (たとえば、jar の内部のみ)。

これがユーザーが編集する (または書き込む) ファイルである場合、Web アプリケーションの外部に配置し、絶対パスを指定します (たとえば、「/etc/myapp/conf/xmd.xsd」 ") 構成可能なプレフィックス付き。

于 2012-12-28T06:56:13.240 に答える
0

File コンストラクターのパスは、絶対パスまたは相対パスにすることができます。「/」でパスを開始すると (Linux ベースの OS で)、そのパスを絶対パスと見なし、ファイル構造のルート (プロジェクトのルートではなく) にファイル/フォルダーを作成します。 . Windows マシンで c:\templates を指定するようなものです。

最初のスラッシュを削除して、プログラムを実行してみてください。最初のスラッシュを削除すると、その部分が .java ファイルから相対的になります。したがって、../ を使用して親フォルダーに切り替えることができます。java: アプリケーションのルート/package/test.java ファイル: アプリケーションのルート/testRoot/template/xmdForModel.xsd

そのため、Java ファイルからディレクトリをアプリケーション ルート フォルダーに変更し、テンプレート フォルダーを選択する必要があります。次のように。

File x = new File("../testRoot/template/xmdForModel.xsd");


ソース: http://docs.oracle.com/javase/tutorial/essential/io/path.html

/home/sally/statusReport は絶対パスです。ファイルを見つけるために必要なすべての情報は、パス文字列に含まれています。

ファイルにアクセスするには、相対パスを別のパスと組み合わせる必要があります。たとえば、joe/foo は相対パスです。詳細情報がないと、プログラムはファイル システム内の joe/foo ディレクトリを確実に見つけることができません。

于 2012-12-28T07:10:46.750 に答える