Parece que no puedo conseguir Java para detectar el archivo de texto. Me mantiene dando una FileNotFoundException()
he podido conseguirlo para encontrar archivos TTF PNG y antes, pero no estoy seguro de si hay algo especial que tengo que hacer para conseguir que se encuentran los archivos de texto en una carpeta de recursos.
Estoy usando Eclipse 2018-19 (4.9.0) con OpenJDK 11.
¿Cómo puedo hacer que mi programa de gestión para encontrar y utilizar este archivo de texto?
Ejemplo 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
}
Excepción recibida:
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)
Mi Ruta del archivo:
Usted está poniendo este archivo en una carpeta de recursos ( res
): esto es diferente que su búsqueda de un archivo en el sistema de archivos local (ver más abajo):
Es necesario utilizar 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
}
}
No voy a profundizar demasiado en getResourceAsStream
, el Javadoc hará mejor explicación , pero:
- Se puede volver
null
si no existe el recurso. Puede que tenga que pasar la prueba fuera del intento con los recursos. - Copias de Eclipse cualquier archivo no Java en la carpeta de salida (
bin
por defecto). - La barra inclinada al final de su código es incorrecto. Java, probablemente intenta leer un directorio.
- Si usted no pone una barra inclinada antes de la ruta (
/text
), será relativa a la clase (y el paquete) en el que se invoca elgetResourceAsStream
método.
Alternativamente, si desea leer el archivo en algún lugar al azar, debe pasar (por ejemplo: configurar Eclipse para ejecutar su programa con algunos argumentos) a su programa y leerlo:
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
}
De lo contrario, debe mover la text
carpeta a la raíz de su proyecto (donde la res
carpeta es), actualice el proyecto, y el uso text/male_human_name_syllables.txt
(ya que es una ruta absoluta).
El res/text/male_human_name_syllables.txt
probablemente trabajar (porque se ejecuta desde la raíz del proyecto).