Pregunta

Tengo un proyecto Java, que tiene esta estructura de archivos (que se muestra en Eclipse):

ProjectName
+- Deployment Descriptor: ProjectName
¦- Java Resources:src
   ¦- Package1
      -MyClass.java
¦- FileFolder
   -MyFile.txt

Y tan lejos de myClass Soy capaz de leer MyFile.txt usando:

try
{
    reader = new BufferedReader(new FileReader(new File("FileFolder/MyFile.txt")));

while((line=reader.readLine())!=null)
{
    line=line.trim();
    myVector.add(line);
}
reader.close();
}
catch(Exception e)
{
     e.printStackTrace();
}

Pero cuando pongo Package1 en un proyecto dinámico Web y la carpeta File Folder en la raíz, el archivo ya no se encuentra.

¿alguien sabe cómo leer el archivo?

Gracias de antemano!

¿Fue útil?

Solución

Proyectos Web dinámicas generan archivos WAR.

El servidor puede o no ampliar la parte posterior archivo WAR a una estructura de sistema de archivos.

estás mejor uso de la Clase o cargador de clases .getResourceAsStream("/FileFolder/MyFile.txt") que puede leer los archivos de JAR / archivos WAR, y devuelve un InputStream.

Ejemplo:

reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/FileFolder/MyFile.txt")));

Editar: Si esto es de una Servlet, considere usar de gawi respuesta en su lugar.

Editar. 2: Si esto es en un método static, necesitará utilizar MyClass.class en lugar de this.getClass(), donde MyClass es el nombre de la clase

Otros consejos

Está abriendo un archivo con una ruta relativa al directorio de trabajo actual. Eso no es probable que el trabajo en un contenedor de aplicación web debido a que el directorio de trabajo actual no va a ser la raíz de su aplicación.

Además, el archivo podría no estar en el sistema de archivos, sino más bien en un archivo WAR.

La forma correcta de abrir un archivo en una aplicación web es utilizar el método ServletContext.getResourceAsStream ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top