Javaプロジェクトの読み込み設定ファイルの形式が終了しました。
4967 ワード
javaプロジェクトでは、リソースファイルをプロジェクトにパッケージ化し、プロジェクトで対応するファイルを読み込む必要があります。
一、Servletクラスで読み込む場合、ファイルをストリームとして取得するには、2つの読み取り方法があります。
(1)ファイルを直接読み込むことはストリーム、getsResource AsStream(path)方法、pathはデフォルトでアプリケーションのルートディレクトリです。
下記の項目を例にとって、プロジェクトのディレクトリ構造は以下の通りです。
1.Class Loader.getsResourceを使って資源ファイルを位置付けする
読み取りと解析の目的を達成するために、まず簡単なテストコードを書きました。
私たちのコードが正常に運行されたら、プリントアウトしたパスは以下の通りです。
2.Class.gets Resourceも資源ファイルの位置付けができます。
もし私たちがClass Loader.get Resourceの方式を使わないならば、Class.get Resourceの方法を使って、資源ファイルにも位置づけられます。コードは以下の通りです
3.mavenにおけるリソースファイルの配置
最終包装の結果は以下のような構造を望んでいます。
src/main/javaとsrc/test/java
この二つのディレクトリの中のすべての*.javaファイルはそれぞれcommieとtest-comple段階でコンパイルされ、コンパイル結果はそれぞれtarget/clasesとtarge/test-clasesディレクトリに入れられますが、この二つのディレクトリの他のファイルは無視されます。
src/main/resocesとsrc/test/resource
この二つのディレクトリのファイルもそれぞれtarget/clasesとtarget/test-clasesディレクトリにコピーされます。
target/clases
パッケージプラグインはデフォルトではこのカタログのすべての内容をjarパッケージまたはwarパッケージに打ち込みます。
私たちは今コンサートの下のkbre5.confをconfパスの下に置きたいです。これは私たちがpom.xmlの中でカスタマイズした配置を行う必要があります。主に2つの方法があります。紹介します。
4.pom.xmlのbuildのpluginsサブ要素に、maven-resource-pluginプラグインを配置します。
5.レスポンスノードの設定
一、Servletクラスで読み込む場合、ファイルをストリームとして取得するには、2つの読み取り方法があります。
(1)ファイルを直接読み込むことはストリーム、getsResource AsStream(path)方法、pathはデフォルトでアプリケーションのルートディレクトリです。
InputStream inputStream =this.getServletContext().getResourceAsStream("/WEB-INF/classes/error.xml");
(2)ファイルを先に読み込んで、ストリームとして読み込む方法は上記と同様です。String path =this.getServletContext().getRealPath("/WEB-INF/classes/error.xml");
InputStream inputStream = newFileInputStream(path);
二、非Servlet類(通常Javaクラス)での読み取り下記の項目を例にとって、プロジェクトのディレクトリ構造は以下の通りです。
├── conf
│ └── krb5.conf
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ ├── resources
│ │ ├── thrift
│ │ └── thrift-java
│ └── test
│ └── java
└── thriftdemo.iml
これはmavenプロジェクトで、mavenプロジェクトのデフォルトの構造の中で、resourceはメーンディレクトリの下にあります。今は外のconfディレクトリのkrb 5.confプロファイルを読みたいですが、どうすればいいですか?1.Class Loader.getsResourceを使って資源ファイルを位置付けする
読み取りと解析の目的を達成するために、まず簡単なテストコードを書きました。
@Test
publicvoidt1() {
String path =Demo.class.getClassLoader().getResource("").getPath();
System.out.println(path);
String filestr = path + "/conf/krb5.conf";
try {
BufferedReader br = new BufferedReader(new FileReader(newFile(filestr)));
while(br.readLine() != null) {
System.out.println(br.readLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
このコードに対して、まず私達が明確にしたいのは、Class Loader.get Resourceメソッドの参加はルートディレクトリから検索しなければならないです。ここでルートディレクトリはtargetのclasesです。 私たちのコードが正常に運行されたら、プリントアウトしたパスは以下の通りです。
/xxx/.../target/classes/
Class Loader.get Resourceを使用する場合、検索はルートディレクトリ、例えばIntellijではtarget/classiesである必要があります。また、ディレクトリ構造も正しく書く必要があります。2.Class.gets Resourceも資源ファイルの位置付けができます。
もし私たちがClass Loader.get Resourceの方式を使わないならば、Class.get Resourceの方法を使って、資源ファイルにも位置づけられます。コードは以下の通りです
@Test
public void t2() {
String path = Demo1.class.getResource("").getPath();
System.out.println(path);
String path2 = Demo1.class.getResource("/").getPath();
System.out.println(path2);
}
コードの出力結果を見てください。/xxx/.../target/classes/edu/bit/files/
/xxx/.../target/classes/
注意が必要なのは、Class.get Resource方法を使用すれば、空に参加する時は、現在.classファイルのパスです。参加が「/」である場合は、ルートディレクトリから検索します。3.mavenにおけるリソースファイルの配置
最終包装の結果は以下のような構造を望んでいます。
classes/
├── conf
│ └── krb5.conf
├── demo.thrift
└── edu
└── bit
がMavenプロジェクトを構築する時、特別な配置をしていない場合、Mavenは標準的なディレクトリ構造に従って各種ファイルを検索して処理します。src/main/javaとsrc/test/java
この二つのディレクトリの中のすべての*.javaファイルはそれぞれcommieとtest-comple段階でコンパイルされ、コンパイル結果はそれぞれtarget/clasesとtarge/test-clasesディレクトリに入れられますが、この二つのディレクトリの他のファイルは無視されます。
src/main/resocesとsrc/test/resource
この二つのディレクトリのファイルもそれぞれtarget/clasesとtarget/test-clasesディレクトリにコピーされます。
target/clases
パッケージプラグインはデフォルトではこのカタログのすべての内容をjarパッケージまたはwarパッケージに打ち込みます。
私たちは今コンサートの下のkbre5.confをconfパスの下に置きたいです。これは私たちがpom.xmlの中でカスタマイズした配置を行う必要があります。主に2つの方法があります。紹介します。
4.pom.xmlのbuildのpluginsサブ要素に、maven-resource-pluginプラグインを配置します。
maven-resources-plugin
2.5
copy-conf
process-sources
copy-resources
${basedir}/target/classes/conf
${project.basedir}/conf
**/*.xml
**/*.conf
では、directoryタグは、reourceファイルのソースパスであり、output Directoryは、reourceファイルの出力経路で構成されている。私たちはリソースファイルをclasesのconfディレクトリの下に置きたいですので、上の配置で結構です。5.レスポンスノードの設定
${basedir}/conf
${basedir}/target/classes/conf
レスポンスノードで上の配置をしても、上のような効果が得られます。