Java, leyendo un archivo del directorio actual?

3 minutos de lectura

Quiero un programa java que lea un nombre de archivo especificado por el usuario del directorio actual (el mismo directorio donde se ejecuta el archivo .class).

En otras palabras, si el usuario especifica que el nombre del archivo sea “myFile.txt”, y ese archivo ya está en el directorio actual:

reader = new BufferedReader(new FileReader("myFile.txt"));

No funciona. ¿Por qué?

Lo estoy ejecutando en Windows.

  • Esto es lo mismo en Linux también

    – Kasun Siyambalapitiya

    21 de diciembre de 2016 a las 3:48

Probar

System.getProperty("user.dir")

Devuelve el directorio de trabajo actual.

  • pero solo devuelve la ruta hasta el directorio raíz del proyecto. cómo podemos obtener la ruta del paquete actual en el método principal de Java

    – Taimoor Changaiz

    20 de enero de 2015 a las 19:18


  • @TaimoorChangaiz, System.getProperty("user.dir") + "\\src\\main\\java\\" + "Winners.txt"

    – steven7mwesigwa

    12 abr 2021 a las 16:36

avatar de usuario
Laurence Gonsalves

El directorio actual no es (necesariamente) el directorio en el que se encuentra el archivo .class. Es el directorio de trabajo del proceso. (es decir: el directorio en el que estaba cuando inició la JVM)

Puede cargar archivos desde el mismo directorio* como el archivo .class con getResourceAsStream(). Eso le dará un InputStream que puede convertir en un Lector con InputStreamReader.


*Tenga en cuenta que este “directorio” puede ser en realidad un archivo jar, dependiendo de dónde se cargó la clase.

  • +1. Si está ejecutando un IDE como Eclipse o Idea, el directorio actual será el directorio del proyecto, no la salida del compilador.

    – Denis Tulsky

    26 de septiembre de 2009 a las 6:05

  • @piiligrim, depende de su configuración de lanzamiento

    – Thorbjorn Ravn Andersen

    26 de septiembre de 2009 a las 9:42

  • @DenisTulskiy Estoy trabajando en Eclipse con la misma codificación que la persona del ejemplo. El mío sigue sin funcionar, ¿por qué?

    – sonido del viento

    30 de enero de 2013 a las 20:39

Ninguna de las respuestas anteriores funciona para mí. Esto es lo que funciona para mí.

Digamos que el nombre de su clase es Foo.java, para acceder a myFile.txt en la misma carpeta que Foo.java, use este código:

URL path = Foo.class.getResource("myFile.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));

  • No se puede acceder al archivo. Dando NullPointerException en path.getFile.

    –Avik Chowdhury

    20 de febrero de 2020 a las 17:57

  • Esto funcionó para mí gracias. Le sugiero que escriba el primer código así: URL ruta = JAVA_FILE_NAME.class.getResource(“myFile.txt”);

    – EX1T_ZER0

    16 de noviembre de 2020 a las 9:11

avatar de usuario
katwekibs

Los archivos de su proyecto están disponibles para usted en relación con su carpeta src. si sabe en qué paquete o carpeta estará myfile.txt, diga que está en

----src
--------package1
------------myfile.txt
------------Prog.java

puede especificar su ruta como “src/package1/myfile.txt” desde Prog.java

Si sabe que su archivo vivirá donde están sus clases, ese directorio estará en su classpath. En ese caso, puede estar seguro de que esta solución resolverá su problema:

URL path = ClassLoader.getSystemResource("myFile.txt");
if(path==null) {
     //The file was not found, insert error handling here
}
File f = new File(path.toURI());

reader = new BufferedReader(new FileReader(f));

avatar de usuario
Hina Halani

Gracias @Laurence Gonsalves, tu respuesta me ayudó mucho. su directorio actual será el directorio de trabajo del proceso, por lo que debe iniciar la ruta completa desde su origen directorio como se menciona a continuación:

public class Run {
public static void main(String[] args) {
    File inputFile = new File("./src/main/java/input.txt");
    try {
        Scanner reader = new Scanner(inputFile);
        while (reader.hasNextLine()) {
            String data = reader.nextLine();
            System.out.println(data);
            
        }
        reader.close();
    } catch (FileNotFoundException e) {
        System.out.println("scanner error");
        e.printStackTrace();
    }
}

}

Mientras que mi archivo input.txt está en el mismo directorio.

ingrese la descripción de la imagen aquí

avatar de usuario
aswin

Prueba esto:

BufferedReader br = new BufferedReader(new FileReader("java_module_name/src/file_name.txt"));

¿Ha sido útil esta solución?