Después de esforzarme por implementar la transferencia de archivos TCP en mi aplicación de chat de conferencia usando flujos de bytes sin formato, decidí que era mucho más fácil enviar archivos que deseaba transferir a través de secuencias de objetos. Los archivos se envían y almacenan en su destino (ya sea el servidor central o el cliente de descarga) como objetos de archivo en memoria. Sin embargo, estos archivos no sirven como objetos de archivo, los clientes deberían poder abrirlos. ¿Hay alguna forma en Java para guardar los objetos de archivo como archivos de disco duro o incluso abrirlos a través de Java?Guardado/apertura de archivos Java
Respuesta
¿Qué quiere decir con "Objetos de archivo"; quieres decir java.io.File
?
La clase java.io.File
es solo una representación de un nombre de directorio y nombre de archivo. No es un objeto que puede contener el contenido de un archivo.
Si usted tiene los datos de, por ejemplo, una matriz de bytes en la memoria, entonces sí, se puede ahorrar que en un archivo:
byte[] data = ...;
OutputStream out = new FileOutputStream(new File("C:\\someplace\\filename.dat"));
out.write(data);
out.close();
Véase el Basic I/O Lesson de tutoriales de Java de Oracle para aprender a leer y escribir archivos con un FileInputStream
y FileOutputStream
.
usted debe buscar en Data Handlers
Usted las puede utilizar para transferir archivos como Data Sources
pero de una manera "transparente" para usted.
Gracias, los miraré en futuro. –
He decidido que es mucho más fácil de enviar archivos que desea transferir través de las corrientes de objeto "
No es mala idea:.. Costes de la memoria y la latencia (tiempo y espacio) Simplemente envíe y reciba los bytes, con las cosas en el frente para decirle el nombre del archivo y el tamaño del archivo.
Intenté enviar el nombre de archivo primero usando un PrintWriter, un d luego los bytes sin formato usando un BufferedOutputStream. El nombre de archivo y los bytes enviarían desde el lado del remitente sin problemas. El lado del receptor también podría recibir el nombre del archivo, sin embargo, no podría recibir ninguno de los bytes sin procesar, solo hizo los archivos vacíos. Cuando cambié a usar un flujo de objeto, parecía funcionar? –
@RichardStokes Eso nunca funcionará. Use las mismas transmisiones en ambos extremos durante la vida de la conexión. PrintWriter tiene un buffer, BufferedOutputStream tiene un buffer, BufferedReader tiene un buffer, y BufferedInputStream tiene un buffer. Demasiados búferes para coherencia a través del cable. Yo usaría un DataOutputStream/DataInputStream para todo, enviando el nombre de archivo con writeUTF()/readUTF(), la longitud con writeLong()/readLong(), y los datos con write() y read(). – EJP
Wow gracias, un comentario brillantemente minucioso. –
- 1. Bloqueo de archivos Java
- 2. Implementación de archivos Java
- 3. Compilación de archivos .java externos desde Java
- 4. Java procesamiento de archivos paralelo
- 5. Operaciones de archivos en Java
- 6. Trayectorias relativas de archivos Java
- 7. java: ¿escribir archivos grandes?
- 8. ¿Genera archivos java JNLP?
- 9. Descargando archivos con Java
- 10. Archivos RAR con java
- 11. nombres de archivos java patrón de filtro
- 12. Buen editor de archivos de propiedades Java
- 13. Codificación de nombres de archivos en Java
- 14. Error de carga de archivos FTP Java
- 15. Análisis de archivos de texto en Java
- 16. descargar archivos utilizando Java Mail
- 17. java - escribir dos archivos atómicamente
- 18. Generar archivos XSD en Java
- 19. Cómo copiar archivos en java
- 20. ¿Dónde busca java los archivos?
- 21. ¿Eliminar archivos bloqueados con Java?
- 22. Uso de Java Compiler API para compilar varios archivos java
- 23. ¿Cuándo JVM de Java descomprime archivos jar?
- 24. Lea archivos de texto unicode con java
- 25. Mover/Copiar operaciones de archivos en Java
- 26. Permisos de archivos Java para hilos
- 27. Liberar bloqueo de archivos Java en Windows
- 28. Explorador de archivos usando Java: ¿cómo hacerlo?
- 29. Nombres de archivos localizados en Java
- 30. Generador de archivos Xml en java
Es malo, no sabía que java.io.File no podía contener los contenidos del archivo. Volver al dibujo tablero así :( –