2011-01-24 11 views
6

tengo que hacer muchas cosas con recursos sobre la marcha: análisis de documentos xsd/xml, la construcción y la compilación de las clases de Java, empaquetarlos en tarros American National Standard de las guerras, persisten en el PP, desplegarlas como OSGi, etc.Java en la estructura de archivos en memoria?

La mayoría de las bibliotecas/API, que utilizo, permiten realizar todas estas tareas intermedias en la memoria, pero solo hay algunas bibliotecas "especiales" que operan con java.io.File. Y no me queda nada más que el uso de archivos y directorios temporales reales que no son buenos en el entorno Java EE.

Creo que debe haber una biblioteca/solución para la estructura de archivos en memoria que tenga nodos que se extiendan java.io.File (como yo lo veo). Ingrese un enlace a bibliotecas conocidas/similares. Cualquier comentario es bienvenido

Gracias!

+0

Creo que esta es más o menos la misma pregunta que http://stackoverflow.com/questions/578305/create-a-java-file-object-or-equivalent-using-a-byte-array-in- memory-without-a –

+0

@Chris Thompson, lo he leído antes de publicarlo. Esto realmente no es lo mismo. – Osw

+0

lo suficientemente justo, puedo ver ese lado de las cosas con seguridad. De cualquier manera, tu pregunta es buena y me sorprendería si no hubiera algo para lograr esto ... –

Respuesta

6

No creo que encuentres lo que estás buscando. La API java.io.File no se escribió con la intención de proporcionar una abstracción del sistema de archivos que se pueda implementar de varias formas. Si bien expone el método para algunas operaciones FS (como eliminar y mkdir), no maneja la E/S básica de lectura/escritura. Eso queda en otras clases, como FileInputStream. Esto significa que, desde el punto de vista de la API, un objeto File no es más que una ruta. Nada es abstraído. Estás atascado.

+0

Buen disparo. ¿Es seguro que java.io.File no realiza E/S básica? Entonces no tengo posibilidades :( – Osw

+0

Bueno, aquí está el javadoc: http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html. Si la clase File estaba abstrayendo I/O operaciones que esperaría ver métodos como getInputStream(), getOutputStream(), etc., que por supuesto no están allí.Desde la introducción de Java, otros han escrito verdaderas API del sistema de archivos que pueden implementarse de diversas maneras, pero eso no ayuda a su uso. –

+0

Acabo de examinar las fuentes File y FileInputStream. Tienes razón, estoy atascado. – Osw

4

Una opción es usar un RAM disk. Su programa pensará que está usando el disco con java.io.File, pero realmente usará la memoria principal.

+0

+1 para señalar las herramientas existentes. Sin embargo, esto aún no necesariamente "encaja bien" en un entorno "Java EE" ... sea lo que sea :) –

+0

@pst, ¿Por qué no "encaja bien" en un entorno "Java EE"? Es solo un FS extra que proporciona el sistema host. Él tiene que usar algún camino para leer y escribir sus archivos de todos modos; también puede estar en el FS en memoria. – Jay

+0

@Jay, gracias por la idea, pero es un poco de hardware/sistema mientras pensaba en la capa de abstracción del software. – Osw

0

Hay una buena alternativa disponible: https://github.com/google/jimfs

Este soporte java (7+) en el manejo del sistema de archivos de memoria y es muy fácil de usar también.

Cuestiones relacionadas