2012-04-20 21 views
6

que tienen la siguiente estructura de código:Carga de archivos de JAR en Scala

Projects/ 
    classes/ 
     performance/AcPerformance.class 
     resources/ 
        Aircraft/ 
          allAircraft.txt 

Tengo el contenido de la carpeta de clases en un frasco y mi código Scala AcPerformance está intentando leer el contenido del texto carpeta de Aeronaves archivos. Mi código:

val AircraftPerf = getClass.getResource("resources/Aircraft").getFile 
val dataDir = new File(AircraftPerf) 
val acFile = new File(dataDir, "allAircraft.txt") 

for (line <- linesFromResource(acFile)) { 
    // read in lines 
} 

Cuando trato de ejecutar el código me sale el siguiente error:

Causado por: java.io.FileNotFoundException: C: \ Projects \ archivo: \ C: \ Projects \ bibliotecas \ aircraft.jar! \ Aircraft \ allAircraft.txt (El nombre del archivo, el nombre del directorio o la sintaxis de la etiqueta del volumen es incorrecto)

¿Es esta la forma correcta de leer el contenido de un JAR? ¡Gracias!

Respuesta

8

No, URL 's getFile no va a hacer lo que usted quiere aquí, el camino que le da no es una vía de sistema que se puede utilizar en un constructor File. Usted sería mejor usar fuera getResourceAsStream y la ruta completa al recurso:

val in = getClass.getResourceAsStream("/resources/Aircraft/allAircraft.txt") 

Tenga en cuenta que también es necesario escribir el prólogo de la ruta con / para que sea absoluta, en su versión actual está buscando un resources directorio bajo performance.