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.


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.


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.


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));

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


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));

1

Prueba esto:

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

0

intente usar "." P.ej

File currentDirectory = new File(".");

Esto funcionó para mi

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.