2012-05-17 29 views
5

estoy tratando de leer un archivo en Java:¿Dónde busca java los archivos?

Public class Test{ 

public static void main (String [] args) throws IOException { 

BufferedReader f = new BufferedReader(new FileReader("test.in")); 

//... 

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out"))); 

//...         

} 

} 

1) ¿Dónde está el lugar de "test.in" ser? (src? bin? ???)

2) ¿Dónde se ubicará "test.out"?

+0

¿Cómo está ejecutando su código? ¿Desde la línea de comando o desde algún lugar como eclipse? –

+0

A juzgar por el hecho de que pregunta por src y bin, supongo que está utilizando algún tipo de SDK. De lo contrario, la respuesta es trivial; la ubicación será la misma ubicación donde ejecuta su archivo java. Proporcione un poco más de información sobre qué SDK está usando y quién puede responder mejor. – NominSim

+3

"¿Dónde busca Java los archivos?" ¿Por qué no preguntarse a Java por sí mismo: 'System.out.println (System.getProperty ('user.dir'));' Edit: 1+ a @mebigfatguy como ahora veo, me dio la misma sugerencia antes que yo. –

Respuesta

2

Normalmente es la ubicación exacta de dónde está el archivo Java que está ejecutando. Entonces, si usa su archivo Java en C: \ y busca un archivo sin especificar una ruta, estará en C: \ que se ve, y el archivo de salida también estará en C: \

Si están usando algo como Netbeans, sin embargo, solo tiene que colocar el archivo en la carpeta del proyecto netbeans de su proyecto específico. No en las carpetas fuente o bin de su proyecto.

+1

Esto solo es cierto si su directorio de trabajo actual también es el mismo que el que contiene el "archivo java" (supongo que estamos hablando de archivos .class y .jar). – rob

+0

Gracioso, es el mismo resultado que recibo cada vez que lo hago. – OmniOwl

+1

He actualizado mi comentario. Si sus archivos de clase o jarfiles están en 'C: \ java' y su directorio de trabajo actual (que puede ver utilizando' System.out.println (System.getProperty ('user.dir')); ') es' C : \ run' cuando inicie el programa, buscará archivos en 'C: \ run'. – rob

8

Un archivo path'ed relativa se buscó en el directorio especificado por System.getProperty ("user.dir")

+0

¡Gracias! ¡Gracias! ¡Gracias! – JohnK

3

La respuesta es la carpeta de trabajo, lo que significa que la carpeta en la que ejecutó el "java ... "comando. Esta es la carpeta del proyecto en proyectos de eclipse, por ejemplo.

1

probablemente he gastado demasiado tiempo en esta cuestión, pero:

C:\temp>notepad test_in.txt => 

de entrada Hola Java!

En el mismo directorio, crear "Test.java":

package com.mytest; 

import java.io.*; 

public class Test { 

    public static void main (String [] args) throws IOException { 
    System.out.println ("Current directory is " + new File(".").getAbsolutePath()); 

    System.out.println ("Reading file " + INPUT_FILE + "..."); 
    BufferedReader fis = 
     new BufferedReader(new FileReader(INPUT_FILE)); 
    String s = fis.readLine(); 
    fis.close(); 
    System.out.println ("Contents: " + s + "."); 

    System.out.println ("Writing file " + INPUT_FILE + "..."); 
    PrintWriter fos = 
     new PrintWriter(new BufferedWriter(new FileWriter("test_out.txt"))); 
    fos.println ("Hello Java output"); 
    fos.close(); 
    System.out.println ("Done."); 
    } 

    private static final String INPUT_FILE = "test_in.txt"; 
    private static final String OUTPUT_FILE = "test_out.txt"; 
} 

Por último, se ejecuta - especifique el nombre completo del paquete:

C:\temp>javac -d . Test.java 

C:\temp>dir com\mytest 
Volume in drive C has no label. 
Volume Serial Number is 7096-6FDD 

Directory of C:\temp\com\mytest 

05/17/2012 02:23 PM <DIR>   . 
05/17/2012 02:23 PM <DIR>   .. 
05/17/2012 02:29 PM    1,375 Test.class 
       1 File(s)   1,375 bytes 
       2 Dir(s) 396,478,521,344 bytes free 

C:\temp>java com.mytest.Test 
Current directory is C:\temp\. 
Reading file test_in.txt... 
Contents: Hello Java input!. 
Writing file test_in.txt... 
Done. 

C:\temp>dir/od test*.txt 
Volume in drive C has no label. 
Volume Serial Number is 7096-6FDD 

Directory of C:\temp 

05/17/2012 02:24 PM    17 test_in.txt 
05/17/2012 02:29 PM    19 test_out.txt 
       2 File(s)    36 bytes 

'Esperanza que ayuda a explicar algunas cosas, incluyendo:

  • Su "directorio predeterminado" con respecto al compilar y ejecutar

  • Cómo "paquetes" se refieren a "directorios"

  • El hecho de que Java pondrá sus archivos de clase en el directorio del paquete (no necesariamente el directorio de trabajo)

1

Eclipse busca el archivo exactamente en la carpeta raíz del proyecto (carpeta del nombre del proyecto). Entonces puede tener src/test.in para localizar el archivo dentro de la carpeta src del proyecto.

Cuestiones relacionadas