Necesito poder acceder a un archivo almacenado en un archivo jar compilado. He descubierto cómo agregar el archivo al proyecto, pero ¿cómo lo haría en el código? ¿Cómo podría copiar un archivo del archivo jar a una ubicación en el disco duro del usuario? Sé que hay docenas de formas de acceder a un archivo (FileInputStream, FileReader, etc.), pero no sé cómo mirar dentro de sí mismo.¿Tiene acceso al archivo en el archivo jar?
Respuesta
usted podría utilizar algo como esto:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileFromJarFile);
Si foo.txt estaba en la raíz del archivo JAR, que tendría que utilizar:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.txt");
asume la clase está en el mismo archivo JAR que el recurso, creo.
Mire la clase JarFile. Todo lo que necesita para obtener el InputStream de una entrada específica en el archivo jar está allí.
Puede usar getResource() para obtener un URL para un archivo en el classpath o getResourceAsStream() para obtener un InputStream en su lugar.
Por ejemplo:
BufferedReader reader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("foo.txt")));
Puede leer el contenido de un archivo JAR utilizando la clase JarFile.
Aquí hay un ejemplo de cómo se puede obtener un archivo específico de un archivo JAR y extraerlo:
JarFile jar = new JarFile("foo.jar");
String file = "file.txt";
JarEntry entry = jar.getEntry(file);
InputStream input = jar.getInputStream(entry);
OutputStream output = new FileOutputStream(file);
try {
byte[] buffer = new byte[input.available()];
for (int i = 0; i != -1; i = input.read(buffer)) {
output.write(buffer, 0, i);
}
} finally {
jar.close();
input.close();
output.close();
}
sólo quería añadir que si queremos acceder a archivos dentro de tarro que se encuentra en la siguiente ruta :
Windows:
c:\your-jar-file.jar\dir1\dir2\dir3\foo.txt
Linux:
/home/your-jar-file.jar/dir1/dir2/dir3/foo.txt
tendrá que utilizar siguiente código (tener en cuenta que hay nO carácter "/" (barra diagonal) en el inicio de la ruta):
InputStream is = this.getClass().getClassLoader().getResourceAsStream("dir1/dir2/dir3/foo.txt");
- 1. que archivo .jar tiene javax.xml.stream. *?
- 2. Ejecutar en el archivo Jar
- 3. Acceso a un archivo dentro de un archivo .jar
- 4. NullPointerException al intentar ejecutar el archivo .jar
- 5. convirtiendo el archivo de clase al archivo jar usando C++
- 6. Acceso multiproceso al archivo
- 7. acceso al archivo peek ahead
- 8. Modificar Ejecutar el archivo jar
- 9. ¿Cómo llamar al método en el archivo jar con terminal?
- 10. C Excepción archivo #: no tiene acceso al archivo porque está siendo utilizado por otro proceso
- 11. analizar el archivo jar programmatically
- 12. obtener el archivo JAR desde
- 13. Acceso al archivo encriptado pgp en Ruby
- 14. ¿Cómo compilo un archivo java que tiene dependencias jar?
- 15. Agregar el directorio actual al classpath de un archivo JAR
- 16. NoClassDefFoundError al ejecutar el archivo jar de Scala
- 17. ¿Cómo incluir el archivo jar al crear un paquete R?
- 18. Cómo agrupar imágenes en el archivo jar
- 19. Usando el archivo Java JAR en .NET
- 20. Actualización del archivo .class en el jar
- 21. ¿Puedo ejecutar el archivo .jar en Tomcat?
- 22. Puede agregar varios archivos jar en un archivo jar y luego iniciar ese archivo jar
- 23. alguna excepción cuando el acceso al archivo en WinRT
- 24. ¿Es seguro denegar el acceso al archivo .ini en .htaccess?
- 25. Cargando un archivo relacionado con el archivo jar de ejecución
- 26. El proceso no tiene acceso al archivo porque está siendo utilizado por otro proceso
- 27. Acceso al archivo local utilizando NSURL
- 28. Acceso de Java al archivo grande
- 29. Cómo excluir el archivo de propiedades del archivo jar?
- 30. Establecer imagen de icono en archivo Jar
Parte de lo que necesito es BufferedReader que necesita un FileReader como una imput. ¿Cómo puedo convertir un InputStream a un FileReader? – LRFLEW
Acabas de jugar conecta los puntos con la documentación de Java. Mire BufferedReader - En la sección Vea también, hay FileReader y InputStreamReader. Vaya a InputStreamReader, etc. –
Sí, puedo hacerlo, pero busqué BufferedReader y encontré la clase de partición BufferInputStream que es lo que necesito usar: P. – LRFLEW