¿Hay alguna manera de obtener el nombre de archivo de FileOutputStream
o de FileInputStream
?Obtener el nombre de archivo de FileOutputStream
Respuesta
Parece que la respuesta es no:
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileOutputStream.html
http://docs.oracle.com/javase/7/docs/api/index.html?java/io/FileOutputStream.html
No hay métodos públicos que devolver el File
o String
utilizados en la construcción de la corriente.
EDITAR: Lo mismo vale para FileInputStream
.
Esta función no es proporcionada por el archivo-entrada/salida-Stream listo para usar, pero nada le impide escribir su propia subclase que almacena el archivo (o fileName) y proporciona un getter para ello.
que sugeriría la aplicación de algunas FileNameAware
interfaz para esto), como E/S corrientes están referenciadas por lo general con los InputStream
/OutputStream
clases abstractas para evitar el acoplamiento de su aplicación con implementaciones específicas.
Mi respuesta llega un poco tarde. Pego el mismo problema cuando escribo un código.
Para evitarlo, utilicé un FileOutputStream(File file)
en lugar de FileOutputStream(String location)
porque puedo hacer file.getAbsolutePath()
. Vea el fragmento de ejemplo a continuación.
String location = "some.relative.path.txt";
File file = new File(location);
FileOutputStream f = new FileOutputStream(file);
String question = "<h3>"+header+"</h3>";
String finalSource = HTMLWrapper.HTML_START+question +htmlContent;
f.write(finalSource.getBytes());
f.flush();
f.close();
System.out.println("The report is now available at"+file.getAbsolutePath());
¿Por qué el voto negativo? ¿Alguien puede explicar? –
Tal vez porque putStream File (Out/In) no importó aquí al mantener el archivo. Si el método solo devuelve un flujo, no tiene ninguna posibilidad (con el uso directo de FileInputStream) de recuperar el archivo subyacente o la ubicación –
posible, con la reflexión: Tom G respuesta es correcta, es decir, no hay una API para obtener la ruta. Sin embargo, si estás atascado como yo con un marco que no puedes cambiar y no puedes obtener el nombre de archivo de ninguna otra manera, puedes usar el reflejo para obtener la ruta (en mi caso, la necesité para propósitos de depuración).
Field pathField = FileOutputStream.class.getDeclaredField("path");
pathField.setAccessible(true);
String path = (String) pathField.get(outputStream);
Obviamente, la implementación de FileOutpuStream podría cambiar con el tiempo y este código podría romperse. Además, omití el manejo de excepciones en el fragmento anterior para mayor claridad.
No disponible en 1.6 y 1.7 Confirmado disponible en 1.8.
. No existe tal campo en JDK 1.6, 1.7 o 1.8. – EJP
EJP, estás equivocado. Hay tal campo. Acabo de probarlo en Java 1.8.0_112-b16. El código completo aquí: –
import java.io.FileOutputStream; import java.lang.reflect.Field; clase pública FileOutputStreamTest { principales (args String []) public static void inicia excepción { FileOutputStream flujoSalida = new FileOutputStream ("./ FileOutputStreamTest.java"); Campo pathField = FileOutputStream.class.getDeclaredField ("ruta"); pathField.setAccessible (true); String path = (String) pathField.get (outputStream); System.out.println ("ruta =" + ruta); } } –
Esto no es posible, incluso en principio. La suposición de la pregunta es que cada flujo de entrada de archivo está asociado con un archivo que tiene un nombre. La última suposición es incorrecta, para los sistemas POSIX. Para los sistemas POSIX, un archivo puede tener cualquier cantidad de nombres (enlaces duros), incluido cero. El caso de cero nombres es bastante común para los archivos temporales, para garantizar que el archivo temporal se elimine al salir del programa.
He escrito un montón de código IO de archivos, y nunca necesité esta funcionalidad. Lo que está pidiendo sugiere que tiene un defecto de diseño. Es decir, tienes un problema XY.
- Casi no hay razón para código para declarar la clase de una referencia a un objeto de secuencia a ser una corrientearchivo. El código IO puede usar un InputStream o OutputStteam. De hecho, es debería, como parte de la programación de una interfaz, y para permitir pruebas de unidades baratas de su código IO (habilitando el uso de una transmisión de matriz de bytes simple como un objeto simulado).
- ¿Quizás esperas usar el nombre de archivo en algunos mensajes de registro? Si es así, eso sugiere que está intentando registrar errores de IO de archivo demasiado bajos en la jerarquía de su programa. Quizás esté detectando IOExceptions demasiado "temprano", en lugar de dejar que se propaguen a partes superiores de su programa, que saben que el IO es el archivo IO y conocen el nombre del archivo.
- 1. ¿Obtener el nombre de archivo de QFile?
- 2. Obtener mimetype desde el nombre de archivo
- 3. Java FileOutputStream Crear archivo si no existe
- 4. Obtener el nombre del archivo usando xsl
- 5. ¿Cómo puedo obtener el nombre de archivo de request.FILES?
- 6. Obtener el nombre del archivo de mapa de bits
- 7. obtener el nombre de archivo de la clase extendida
- 8. MS Access obtener el nombre de archivo seleccionado de FileDialog
- 9. Obtener el nombre de archivo de una ruta con Javascript
- 10. ¿Cómo obtener el nombre de archivo de una DLL?
- 11. Obtener el nombre de archivo sugerido de org.apache.http.HttpResponse
- 12. ASP.NET: Obtener el nombre de archivo de la página
- 13. Android: ¿Obtener el nombre de archivo de la cámara?
- 14. ¿Obtener el nombre de archivo de string-path?
- 15. Obtener el nombre del archivo de secuencia de comandos actual
- 16. cómo obtener el nombre de archivo de URI
- 17. Cómo obtener el nombre de archivo de .EXE
- 18. ¿Cómo obtener el nombre de archivo de logging.FileHandler en Python?
- 19. ColdFusion: obtener el nombre de un archivo antes de subir
- 20. ¿Cómo obtener un nombre de archivo temporal?
- 21. Eliminación de archivos creados con FileOutputStream
- 22. Obtener el nombre del archivo MAKE del archivo MAKE
- 23. bat archivo: obtener el nombre de ruta principal
- 24. Obtener el nombre de la fuente del archivo .ttf
- 25. Cómo obtener el nombre del archivo de entrada en MRjob
- 26. ¿Cómo obtener el nombre del archivo de la intención?
- 27. Obtener el nombre de archivo durante la descarga se
- 28. Cocos2d CCSprite Clase obtener el nombre del archivo de imagen
- 29. Obtener el tipo MIME del nombre de archivo en C
- 30. ¿Cómo obtener el nombre de un archivo abierto?
Supongo que la misma respuesta es para FileInputStream ¿no? –
@ Stephen- Leí los documentos, pero solo quería confirmar que no me había perdido nada. –