Tengo archivos de texto importados a la carpeta de mi proyecto java a través de eclipse. Estoy tratando de cargar los textos que contienen un diccionario de palabras aleatorias, revisarlos y crear un mapa de hash con la primera letra de las palabras como clave y la palabra en su conjunto como valor.

Tengo un método en una clase WordStore:

public WordStore(String k) throws IOException {
    map = new HashMap<String, List<String>>();
    BufferedReader buffread = null;
    File filename = null;
    FileReader fread = null;
    try{
        filename = new File(k);
        fread = new FileReader(filename);
        buffread = new BufferedReader(fread);   
        String word ="";

        while((word = buffread.readLine()) != null) {
            if(word.length()<3) {
            //don't add word less than 3 characters long
            }
            else {
                String key = ""+(word.charAt(0));
                put(key, word);
            }

        }

    }
    catch(IOException e) {
        System.out.println("File not found exception caught!");
    }
    finally {
        if(buffread != null) {
            try {
                buffread.close();
            }
        catch(IOException e) {
            e.printStackTrace();
        }
        }
    }

}

Lo uso en la clase WordStoreTest:

import java.io.IOException;

public class WordStoreTest {

public static void main(String[] args) throws IOException {
    WordStore store = new WordStore("nouns.txt");
    System.out.println(store.getRandomWord("b"));

}

}

Excepción:

File not found exception caught! java.io.FileNotFoundException: nouns.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.(FileInputStream.java:138
 at java.io.FileReader.(FileReader.java:72
 at WordStore.(WordStore.java:34
 at WordStoreTest.main(WordStoreTest.java:14) null

enter image description here

-2
halo2x2 23 feb. 2018 a las 16:05

2 respuestas

La mejor respuesta

En lugar de obtener un BufferedReader de un File, siempre uso un InputStream. Como ejemplo, podría hacer esto:

String path = "/nouns.txt";
try {
    InputStream is = this.getClass().getResourceAsStream("/misc/sample.txt");
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));


    String line = bufferedReader.readLine();
    for(; line!=null; line=bufferedReader.readLine()) {
        System.out.println(line);
    }


    bufferedReader.close();
} catch (IOException e) {
    e.printStackTrace();
}

Por supuesto, la ruta aquí asume que sus archivos txt están debajo de src y no un paquete, pero siempre puede cambiar eso. Incluso podría crear una segunda carpeta de origen y ponerla dentro de ella.

0
Alpin Gencer 23 feb. 2018 a las 13:55

Para acceder a un archivo que está dentro de la estructura de su proyecto, debe volver a crear la ruta desde la raíz del proyecto hasta el archivo en sí.

Suponiendo que el archivo reside en la carpeta src, como

PROJECT
 |
  src
   |
    nouns.txt
    aPackage
      |
       Main.java

Entonces el siguiente código es exitoso:

public class Main {
  public static void main(String[] args) {
     System.out.println(Files.exists(Paths.get("src", "nouns.txt")));
 }
}
0
Emerson Cod 23 feb. 2018 a las 13:39