1

完全に単一のテキストファイルに基づくプログラムを作成しました。ファイルを読み取り、情報を保存してから、情報を検索するなどです。したがって、プログラムが機能するには、ファイルが存在し、プログラムによって検出可能である必要があります。 。私はEclipseを使用しているので、ファイルをデフォルトのリソースマップ(src / main / resources)に配置します。プログラムの開始時に、ファイルを作成します。

private static File textFile = new File("src/main/resources/TEXT.TXT")

ただし、Mavenを使用してプログラムをパッケージ化しようとすると、すべてのクラスファイルとリソースファイルが同じフォルダーにあるJARが表示されます。ファイルが見つからないため、プログラムが動作を停止します。

この問題に対処する方法について何か助けはありますか?私のプログラムが日食とJARとして機能する状況を好みますが、JARとしてのみ問題ありません。

4

2 に答える 2

3

ClassLoader.getResourceAsStreamを使用して、クラスパスからロードできます(または、getResourceを使用してファイルのURLを取得できます)。

Thread.currentThread().getContextClassLoader().getResource("TEXT.TXT")

これは、 src / main/resourcesがEclipseのクラスパス上にある限り機能します。(Maven eclipseプラグインにはデフォルトで含まれています。)Eclipseの外部で機能するには、ファイルがjarファイルに含まれている必要があります。

于 2009-11-25T11:17:46.210 に答える
0

良い提案です。これはEclipse自体で完璧に機能します。ファイルの正しい場所が返され、ファイルを使用して好きなことを行うことができます。プログラムをjarとして開く場合、まだ問題があります。getResourceメソッドは、正しい場所のように見える場所を返します。

/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT。

ただし、このURLを文字列に変換し、その文字列を使用してファイルオブジェクトを作成し、プログラムでこのファイルオブジェクトを使用すると、次のエラーが発生します。

java.io.FileNotFoundException:file:/something/something/something/something/workspace/program/target/program-0.0.1.jar!/TEXT.TXT(そのようなファイルまたはディレクトリはありません)

したがって、getResourceメソッドはファイルを検出しますが、プログラムはどういうわけかそれを使用できません。

于 2009-11-26T14:09:03.013 に答える