ベア心の中に(たとえば、アプリまたはサーバー)。その場合、開発ソースコード構造は利用できません。
テキストファイルやその他のリソースをJavaで読むには、主に2つの方法があります。実際のファイルへのパスを見つけることができます。その場合は、開発ソースツリーが不足している可能性があります。テキストファイルをプロジェクトにバンドルする方法を見つける必要があります。
ほとんどのJavaプロジェクトは、JARファイルまたはWARファイル(Webアプリケーション用)またはAndroid APKなどのアーカイブにコンパイルされてしまいます。ほとんどの場合、独自のテキストファイルをプロジェクトアーカイブに追加できます。たとえば、Mavenプロジェクトでは、テキストファイルをsrc/main/resources
フォルダに置くだけであれば、コンパイル済みのJARファイルに含める必要があります。
ただし、この場合、テキストファイルは別のファイルではなくなりましたディスクではなく、アーカイブ内のデータの塊である。アーカイブを解凍して実際のFile
オブジェクトを取得することはできますが、実際に必要なのはバイトを読み取るだけで済む場合は無駄です。
このように、このようなテキストファイルを読み取る最も一般的な方法は、.class
ファイルをディスクから(またはアーカイブから、またはネットワーク経由で)何かを読み取っている既存のClassLoader
メカニズムを使用することです。 ClassLoader
は既にコンパイルされたコードの "横に"あるバイトをロードする方法を知っているので、それを利用することができます。あなたのケースでは
、あなたはこのような何かを行うことができるようになります。この場合
Scanner scanner = new Scanner(
getClass().getResourceAsStream("/path/to/file.txt"));
は、/path/to/file.txt
パスはあなたのクラスがからロードされたパスからの相対です。例えば。クラス名がmy.package.Foo
の場合、実際のクラスバイトはmy/package/Foo.class
という名前のフォルダ(ファイルシステムフォルダまたはJARファイルなど)に格納されます。この場合、path/to/file.txt
とmy/package/Foo.class
は同じルートからの相対パスになります。
詳細については、the documentation on resourcesを参照してください。あなたはこのような何かを行うことができ、ファイルにアクセスするためにそう