2010-05-17 23 views
24

Necesito leer un archivo de texto cuando comienzo mi programa. Estoy usando eclipse y comencé un nuevo proyecto de Java. En la carpeta de mi proyecto obtuve la carpeta "src" y el estándar "JRE System Library" + staedteliste.txt ... Simplemente no sé dónde colocar el archivo de texto. Literalmente probé todas las carpetas en las que podía pensar ... No puedo usar una ruta "codificada" porque el archivo de texto debe incluirse en mi aplicación ...¿Dónde poner un archivo de texto que quiero usar en eclipse?

Utilizo el siguiente código para leer el archivo, pero me sale este error:

Error:java.io.FileNotFoundException:staedteliste.txt(No such file or directory) 

public class Test { 

ArrayList<String[]> values; 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    URL url = Test.class.getClassLoader().getResource("src/mjb/staedteliste.txt"); 
    System.out.println(url.getPath()); // I get a nullpointerexception here! 
    loadList(); 
} 

public static void loadList() { 
    BufferedReader reader; 
    String zeile = null; 

    try { 
     reader = new BufferedReader(new FileReader("src/mjb/staedteliste.txt")); 
     zeile = reader.readLine();   

     ArrayList<String[]> values = new ArrayList<String[]>(); 

     while (zeile != null) {    
      values.add(zeile.split(";")); 
      zeile = reader.readLine(); 
     } 
     System.out.println(values.size()); 
     System.out.println(zeile); 

    } catch (IOException e) { 
     System.err.println("Error :"+e); 
    } 
} 

}

+0

al iniciar su aplicación desde Eclipse puede configurar el directorio de inicio. ¿Estás seguro de que no lo has configurado incorrectamente accidentalmente? 'nuevo archivo (". "). getAbsolutePath()' te mostrará. – mihi

Respuesta

39

Pregunte primero usted mismo: ¿Es su archivo un componente interno de su aplicación? (Eso generalmente implica que está empaquetado dentro de su JAR, o WAR si es una aplicación web, generalmente es algún archivo de configuración o recurso estático, de solo lectura).

Si la respuesta es sí, no desea especificar una ruta absoluta para el archivo. Pero no desea acceder a ella con una ruta relativa (como su ejemplo), porque Java asume que la ruta es relativa al "actual directorio". Por lo general, la forma preferida para este escenario es cargarlo relativamente desde el classpath.

Java le proporciona el método classLoader.getResource() para hacer esto. Y Eclipse (en la configuración normal) asume que src/ debe estar en la raíz de su classpath, de modo que, después de compilar, copie todo a su directorio de salida (bin/), los archivos java en forma compilada (.class), el resto como es. Por ejemplo, si coloca su archivo en src/Files/myfile.txt, se copiará en tiempo de compilación a bin/Files/myfile.txt; y, en tiempo de ejecución, bin/ estará en (la raíz de) su ruta de clase.Entonces, al llamar al getResource("/Files/myfile.txt") (en algunas de sus variantes) podrá leerlo.

Editado: Además, si el archivo está conceptualmente ligada a una clase Java (por ejemplo, algunos com.example.MyClass tiene un archivo de configuración asociado MyClass.cfg), se puede utilizar el getResource() method from the class y utilizar un (recurso) ruta relativa: MyClass.getResource("MyClass.cfg"). Luego, se buscará el archivo en la ruta de clase, pero con el paquete de clase preasignado. De modo que, en este escenario, normalmente colocará sus archivos MyClass.cfg y MyClass.java en el mismo directorio.

+2

la carpeta no es importante, solo traté de hacerlo con una carpeta ya que no tenía idea qué más hacer ... de todos modos, probé el código de "Greg Adamski", pero no funciona ... – MJB

+0

El código de Greg debería funcionar. ¿"Prueba" es la clase que tiene tu método principal? (No es necesario). ¿Hizo una compilación completa en Eclipse? ¿Su archivo se copió en su bin/directorio? – leonbloy

+0

sí ... Lo sé, no es una buena práctica, pero como se puede adivinar es solo una prueba ... mi proyecto se llama "Prueba" y también mi única clase que tiene el método principal ..... I no puedo construirlo porque obtengo la excepción NP ...:/ Si hago un comentario en la línea donde recibo el error NPeception, obtengo el archivoNotFoundException nuevamente ... pero sí ... cuando obtengo el archivo no encontrado-exc, el archivo se copia en la carpeta "bin". – MJB

0

Dependiendo de su paquete de Java nombre de la clase, es probable que 4 o 5 niveles por debajo de la estructura de directorios.

Si su paquete de clase Java es, por ejemplo, com.stackoverflow.project, su clase se encuentra en src/com/stackoverflow/project.

Puede mover la estructura del directorio a múltiples ../, o puede mover el archivo de texto al mismo paquete que su clase. Sería más fácil mover el archivo de texto.

+0

el nombre de mi paquete es "mjb", así que usé "src/mjb/staedteliste.txt" .. Incluso cuando pongo mi archivo .txt en cada carpeta obtengo una nullpointereception. – MJB

9

Una ruta a tomar es

  1. Añadir el archivo que está trabajando a la ruta de clase
  2. Uso del cargador de recursos para localizar el archivo:

    URL url = Test.class.getClassLoader().getResource("myfile.txt"); 
        System.out.println(url.getPath()); 
        ... 
    
  3. abierto que
+0

public static void main (String [] args) { URL url = Test.class.getClassLoader(). GetResource ("staedteliste.txt"); \t System.out.println (url.getPath()); Obtengo una NullPointerException cuando llego a la línea sop .. Pongo el archivo en la carpeta src/y la raíz de mi proyecto, en "Probar/.." – MJB

+0

Debe asegurarse de que su archivo esté apareciendo justo debajo de su directorio src en eclipse. Si solo lo copió en el uso del explorador, deberá actualizar el proyecto para que se muestre. –

+0

En mi Explorador de paquetes en eclipse, recibí mi Proyecto llamado "Prueba". Cuando amplío "Test", veo "src", "JRE SystemLibrary" y "staedteliste.txt" (en este orden). Solo presiono actualizar y ejecuté el código nuevamente, pero todavía NPExc .. – MJB

2

Supongamos que tiene un proyecto llamado "TestProject" en Eclipse y su carpeta de espacio de trabajo se encuentra en E:/eclipse/workspace. Cuando construyes un proyecto de Eclipse, tu classpath es e:/eclipse/workspace/TestProject. Cuando intenta leer "staedteliste.txt", está intentando acceder al archivo al e:/eclipse/workspace/TestProject/staedteliste.txt.

Si desea tener una carpeta separada para su proyecto, cree la carpeta Archivos en TestProject y luego acceda al archivo con (la ruta relativa) /Files/staedteliste.txt. Si coloca el archivo debajo de la carpeta src, debe acceder a él usando /src/staedteliste.txt. Una carpeta de archivos dentro de la carpeta src sería /src/Files/staedteliste.txt

En lugar de utilizar la ruta relativa puede utilizar la absoluta añadiendo e:/eclipse/workspace/ al principio, pero utilizando la ruta relativa es mejor porque se puede mover el proyecto sin preocuparse refactorización siempre que la estructura de la carpeta del proyecto sea la misma.

+1

no funciona. Obtengo una NullPointerException ahora ... Literalmente puse el archivo en todos los sitios en los que podía pensar y cambié la ruta en consecuencia, nada ... – MJB

0

MJB

Por favor, intente esta

  1. en Eclipse "clic derecho" en el archivo de texto u utilización quiero, ver y copiar la ruta completa almacenada en el disco duro como (si está en UNIX "/ home/sjaisawal/Space-11.4-template/provisioning/devenv/Test/src/testpath/testfile.txt ")

  2. pon esta ruta completa y prueba.

  3. si funciona entonces cuestión de clase-ruta cosa Gobierno de Corea :)

2

Basta con crear una carpeta Files bajo src y poner su archivo allí. Esto se verá como src/Files/myFile.txt

Nota: En su código es necesario que especifique como este ejemplo Files/myFile.txt

getResource("Files/myFile.txt"); 

De modo que cuando construya su proyecto y ejecute el archivo .jar esto debería poder funcionar.

+0

¿No debería estar el nombre de la carpeta en minúscula? –

+0

no funciona para mí, tuve que poner el archivo en el directorio principal del proyecto como Mark asesorado. – Line

0

Si se trata de un proyecto simple, debería poder arrastrar el archivo txt directamente a la carpeta del proyecto. Específicamente, la "carpeta del proyecto" sería la carpeta de más alto nivel. Intenté hacer esto (para un proyecto de tarea que estoy haciendo) colocando el archivo txt en la carpeta src, pero eso no funcionó. Pero finalmente me di cuenta de que debía ponerlo en el archivo del proyecto.

Un buen tutorial para esto es http://www.vogella.com/articles/JavaIO/article.html. Lo usé como una introducción a E/S y me ayudó.

0

Tome un vistazo a este video

Todo lo que tiene que hacer es seleccionar el archivo (asumiendo que es misma forma simple de archivo txt), luego arrastrarlo al proyecto en Eclipse y luego dejarlo caer allí. Elija Copiar en lugar de Enlace, ya que es más flexible. Eso es todo, lo intenté.

Cuestiones relacionadas