私は私のテキストファイルを検出するために、Javaのように見えることはできません。それは私に与え続けてFileNotFoundException()
、私はそれが前にPNGとTTFファイルを見つけるために取得することができたが、私はそれがリソースフォルダ内のテキストファイルを見つけるために取得するために必要な何か特別ながある場合、私はわかりません。
私はOpenJDKの11でEclipseの2018から19(4.9.0)を使用しています。
どのように私は私のプログラムは、このテキストファイルを検索し、活用するために管理することができますか?
MCV例:
public static main(String[] args) {
generateHumanName();
}
/**
* Generates a male "human-ish" name from a text file of syllables.
* @return String The male human name.
*/
private static String generateHumanName() {
try {
FileReader("/text/male_human_name_syllables.txt/");
} catch (IOException e) {
e.printStackTrace();
}
return null; // never called
}
例外受付します:
java.io.FileNotFoundException: ../res/text/male_human_name_syllables.txt (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at mcve.MCVE.generateHumanName(MCVE.java:21)
at mcve.MCVE.main(MCVE.java:12)
マイファイルのパス:
あなたは(リソースフォルダにこのファイルを入れているres
):これはローカルファイルシステム上のファイルを閲覧するとは異なります(下記参照):
あなたは使用する必要がありますMCV.class.getResourceAsStream("/text/male_human_name_syllables.txt")
:
try (InputStream is = MCVE.class.getResourceAsStream("/text/male_human_name_syllables.txt")) {
if (null == is) {
throw new FileNotFoundException("/text/male_human_name_syllables.txt");
}
try (BufferedReader in = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) {
// do stuff here
}
}
私はあまりの掘り下げないであろうgetResourceAsStream
、javadocがより良い説明を行いますが、:
- これは、返すことがあり
null
、リソースが存在しない場合。あなたは、リソースを試して外にテストを移動する必要があるかもしれません。 - Eclipseのコピー(出力フォルダに任意の非javaファイル
bin
デフォルトでは)。 - あなたのコードの末尾にスラッシュは間違っています。Javaはおそらくディレクトリを読み取ろうとします。
- あなたがパスの前にスラッシュを入れていない場合は(
/text
)、それはあなたが起動した上で、クラス(およびパッケージ)からの相対になりますgetResourceAsStream
方法を。
あなたはいくつかのランダムな場所にファイルを読みたい場合は別の方法として、あなたはそれを渡す必要があります(例:いくつかの引数を使用してプログラムを実行するためのconfigure Eclipseの)あなたのプログラムに、それをお読みください。
public static main(String[] args) {
if (args.length < 1) throw new IllegalArgumentException("missing path");
generateHumanName(args[0]);
}
/**
* Generates a male "human-ish" name from a text file of syllables.
* @return String The male human name.
*/
private static String generateHumanName(String path) {
try (FileReader reader = new FileReader(path)) {
} catch (IOException e) {
e.printStackTrace();
}
return null; // never called
}
そうでなければ、あなたが移動する必要がありますtext
(プロジェクトのルートにフォルダをres
フォルダがある)、プロジェクト、および使用をリフレッシュtext/male_human_name_syllables.txt
(つまり絶対パスであるため)。
res/text/male_human_name_syllables.txt
(それはプロジェクトのルートから実行されるため)おそらく動作します。