2011-01-21 10 views
7
public class ABC { 
    public ABC() { 
     File file = new File("xyz.xml"); 

pero cuando corro mi tarro de la siguiente manera:archivo no encontrado una excepción en el tarro

java -jar filename.jar arguments.... 

continuación, se muestra el error:

java.lang.IllegalArgumentException: InputStream cannot be null 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:120) 
at com.ensarm.niidle.web.proxy.ABC.<init>(ABC.java:47) 

¿Cómo puedo solucionarlo?

Respuesta

10

Si necesita leer el contenido del archivo en JAR, no puede usar la clase File directamente. Usando cargador de clases para cargarlo:

// for example read the SeleniumConfiguration.xml in the default package

InputStream input = SeleniumConfiguration.class.getResourceAsStream("/SeleniumConfiguration.xml"); 
+1

Sí, correcto. No puede abrir un "Archivo" porque supone que se encuentra en un sistema operativo o red. No "verá dentro" el frasco. Buena respuesta @ qrtt1. Me pegaste a cómo describirlo. :) –

+0

Gracias qrtt1 – swarup7m

4

El NullPointerException es una clara indicación de que el archivo no ha sido encontrado.

InputStream input=ABC.class.getResourceAsStream("/Element.xml");

¿Dónde está su archivo XML? Si lo coloca en el mismo paquete (directorio dentro del archivo jar) como ABC.class, entonces debe ser Element.xml sin la barra diagonal.

0

¿Pusiste tu archivo xml en la raíz del archivo jar? Si utiliza una ruta como "/Element.xml", la estructura de archivos jar debe ser como:

fichero-jar

  • com
  • META-INF
  • element.xml
+0

Y si está utilizando un sistema automatizado para compilar el contenedor (en lugar de ejecutarlo a mano), al menos en Linux, puede ejecutar menos en el contenedor para ver qué archivos están contenidos, o jar -xvf para extraer los archivos del contenedor. – James

+0

'jar -tf' solo para ver el listado de archivos – Thilo

1

Normalmente puede utilizar InputStream como se sugiere, pero en el caso de que desee realizar otras operaciones que no sean java en el archivo, por ejemplo, descifrarlo utilizando una aplicación externa, etc., puede usar FileOutputStream para escribir esta secuencia en un archivo y luego usar i la ruta de t como una ruta de archivo correcta. En palabras simples, puede descomprimir este archivo en su sistema de archivos.

Cuestiones relacionadas