Java no puede encontrar el archivo de texto en la carpeta de recursos

LuminousNutria:

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:

introducir descripción de la imagen aquí

Datos no encontrados :

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:

  1. Se puede volver nullsi no existe el recurso. Puede que tenga que pasar la prueba fuera del intento con los recursos.
  2. Copias de Eclipse cualquier archivo no Java en la carpeta de salida ( binpor defecto).
  3. La barra inclinada al final de su código es incorrecto. Java, probablemente intenta leer un directorio.
  4. 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 el getResourceAsStreammé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 textcarpeta a la raíz de su proyecto (donde la rescarpeta 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.txtprobablemente trabajar (porque se ejecuta desde la raíz del proyecto).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=234398&siteId=1
Recomendado
Clasificación