Necesito una clase de Java que extienda el archivo que en algún momento puede residir exclusivamente en la memoria y en otro momento se transmite al disco, ¿qué debo usar?

Bueno, esto es lo que haría:

(TL; Versión DR: use las propiedades -d en la línea de comando de Java)

MyCloudOutputStreamFactory dos clases de fábrica, digamos MyCloudOutputStreamFactory y MyDevOutputStreamFactory , cada una extendiéndose

  interfaz pública MyOutputStreamFactory {
         public OutputStream getOutputStream ();
 }

Cada clase de fábrica tendría la lógica necesaria para configurar el flujo de salida de datos para su entorno respectivo, por ejemplo, abrir un archivo para la versión de desarrollo, etc.

Me gustaría que mi programa escribiera datos en un OutputStream .
El código de inicialización se vería así:

  MyOutputStreamFactory factory = Class.forName (System.getProperty ("my.output.stream.factory.classname")). NewInstance ();
 OutputStream dataStream = factory.getOutputStream ();

En la línea de comando de Java, definiría una propiedad para el nombre de clase de fábrica,
por ejemplo, cuando se ejecuta en dev:
java -dmy.output.stream.factory.classname=com.example.MyDevOutputStreamFactory ...
y cuando se ejecuta en la nube:
java -dmy.output.stream.factory.classname=com.example.MyCloudOutputStreamFactory ...

MyDevOutputStreamFactory necesitaría un nombre de archivo, por lo que podría definir otra propiedad para eso.

Disculpas de antemano por errores tipográficos / errores; ¡Soy inútil sin Eclipse! 🙂 Sin embargo, espero que entiendas la idea.