¿Cómo se obtiene la ruta/nombre del archivo de un InputStream en Java?Ruta del archivo/nombre de InputStream
Respuesta
No es posible. (no desde FileInputStream en la API de Java). El constructor FileInputStream
no almacena esta información en cualquier campo:
public FileInputStream(File file) throws FileNotFoundException {
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
open(name);
}
No puede porque el InputStream
podría no haber sido un archivo o una ruta. Puede implementar su propio InputStream
que genere datos sobre la marcha
Dos importantes orientadas a objeto Principios de diseño que impiden hacer lo que preguntas: abstracción y la encapsulación.
- Abstracción es el proceso de definición de un concepto general que tiene sólo los detalles necesarios para su uso en un contexto particular (más detalles here). En esta situación, la abstracción es
InputStream
, que es una interfaz general que puede proporcionar bytes, independientemente de la fuente de esos bytes. La abstracción de unInputStream
no tiene ningún concepto de una ruta de archivo; eso solo es relevante para implementaciones particulares deInputStream
. - La encapsulación es el proceso de ocultar detalles de implementación de una clase a consumidores/usuarios de esa clase. En esta situación particular,
FileInputStream
encapsula los detalles del archivo que está leyendo, porque comoInputStream
esa información no es relevante para el uso. El campo de instanciapath
es encapsulado y, como tal, no está disponible para los usuarios de la clase.
Habiendo dicho esto, es posible acceder a la variable path
si usted está dispuesto a aceptar algunas limitaciones importantes. Básicamente, la esencia es que puede verificar si el InputStream
es, de hecho, una instancia de FileInputStream
y, de ser así, utilice la reflexión para leer el campo de instancia path
. Dejaré de lado los detalles de hacer ese acceso, ya que es fácilmente detectable en los documentos de Java java.lang.Class
y en línea, y no es realmente algo bueno en la mayoría de los contextos. Dado que la pregunta no proporciona un contexto sobre por qué, es difícil ofrecer enfoques más razonables.
- 1. Obtener un InputStream/io.Reader del objeto OMElement
- 2. Proceso InputStream
- 3. Descomprimir un archivo de InputStream y devolver otro InputStream
- 4. Cambio de tamaño del mapa de bits de InputStream
- 5. Leer texto de InputStream
- 6. CSVReader y InputStream
- 7. Cómo clonar un InputStream?
- 8. Java: InputStream marca de límite
- 9. Cierre correcto del proceso Java InputStream de getInputStream
- 10. InputStream vs InputStreamReader
- 11. Java InputStream espera datos.
- 12. Java InputStream tamaño
- 13. Convertir InputStream en BufferedReader
- 14. Copiando Http Request InputStream
- 15. Android InputStream Internet Disconnect
- 16. DocumentBuilder.parse (InputStream) devuelve nulo
- 17. String de Java desde InputStream
- 18. ruta del archivo como argumento ruta MVC
- 19. DocumentBuilder.parse cerrar el InputStream
- 20. ¿Cómo puedo convertir un InputStream sin comprimir en un InputStream gzip'ed de manera eficiente?
- 21. Ruta del directorio local
- 22. ¿Cómo obtengo el InputStream de datos descomprimidos de un InputStream de datos GZIPed?
- 23. ¿Cómo obtener la ruta del servidor de la ruta física?
- 24. Lectura de InputStream como UTF-8
- 25. Redes de Java: evented Socket/InputStream
- 26. Determine el tamaño de un InputStream
- 27. Implementaciones de InputStream en segundo plano almacenadas
- 28. Java SQL Resultado para InputStream
- 29. Cómo convertir byte [] a InputStream?
- 30. ¿Cerrar URLConnection y InputStream correctamente?