Java, ¿leyendo un archivo del directorio actual?

83

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 es "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.

Saobi
fuente
1
Esto también es lo mismo en Linux
Kasun Siyambalapitiya

Respuestas:

52

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 se encontraba cuando inició la JVM)

Puede cargar archivos desde el mismo directorio * que 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.

Laurence Gonsalves
fuente
15
+1. Si está ejecutando un IDE como Eclipse o Idea, el directorio actual será el directorio del proyecto, no la salida del compilador.
Denis Tulskiy
2
@piiligrim, depende de su configuración de lanzamiento
Thorbjørn Ravn Andersen
@DenisTulskiy Estoy trabajando en Eclipse con la misma codificación que hizo la persona del ejemplo. El mío todavía no funciona, ¿por qué?
sonido del viento
79

Tratar

System.getProperty("user.dir")

Devuelve el directorio de trabajo actual.

Joonas Pulakka
fuente
6
pero devuelve solo 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
35

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

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

URL path = Foo.class.getResource("myFile.txt");
File f = new File(path.getFile());
reader = new BufferedReader(new FileReader(f));
Tony Vu
fuente
1
No se puede acceder al archivo. Dando NullPointerException en path.getFile.
Avik Chowdhury
Esto funcionó para mí gracias. Le sugiero que escriba el primer código así: URL path = JAVA_FILE_NAME.class.getResource ("myFile.txt");
EX1T_ZER0
16

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

katwekibs
fuente
5

Si sabe que su archivo vivirá donde están sus clases, ese directorio estará en su ruta de clases. 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));
Joel Westberg
fuente
1

Prueba esto:

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

intente usar "." P.ej

File currentDirectory = new File(".");

Esto funcionó para mi

Charlie
fuente