Crea un objeto File en la memoria a partir de una cadena en Java

113

Tengo una función que acepta File como argumento. No quiero crear / escribir un nuevo archivo (no tengo acceso de escritura al sistema de archivos) para pasar mis datos de cadena a la función. Debo agregar que los datos de String no existen en un archivo (por lo que no puedo leer mis datos de un archivo).

¿Puedo utilizar Streams y "convertirlos" en objetos File?

Jon Romero
fuente
2
¿Puede vincular / publicar el código que toma un Fileobjeto? Como han indicado las respuestas, un Fileobjeto es como una referencia a una ubicación en el sistema de archivos, por lo que sería difícil de simular sin un archivo real. Sin embargo, si su función tomó a FileReadero a FileInputStream, podría modificar fácilmente el código para aceptar entradas que no sean de archivos.
101100
Los archivos mapeados en memoria pueden ser su elección. Estos son archivos especiales en Java que permiten al programa Java acceder al contenido directamente desde la memoria. Para obtener más información, visite este enlace: javarevisited.blogspot.com/2012/01/…
Bacteria

Respuestas:

48

No; Las instancias de clase Filerepresentan una ruta en un sistema de archivos. Por lo tanto, puede usar esa función solo con un archivo. ¿Pero tal vez hay una sobrecarga que toma una InputStreamen su lugar?

meriton
fuente
76

Por lo general, cuando un método acepta un archivo, hay otro método cercano que acepta una transmisión. Si este no es el caso, la API está mal codificada. De lo contrario, puede usar archivos temporales, donde generalmente se otorga permiso en muchos casos. Si es un subprograma, puede solicitar permiso de escritura .

Un ejemplo:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}
Chris Dennett
fuente
1
No se puede solicitar permiso de escritura (es Google AppEngine)
Jon Romero
12

Un objeto Archivo en Java es una representación de una ruta a un directorio o archivo, no el archivo en sí. No necesita tener acceso de escritura al sistema de archivos para crear un Fileobjeto, solo lo necesita si realmente desea escribir en el archivo (usando un FileOutputStream por ejemplo)

Kevin K
fuente
1
Si necesita pasar un archivo a una API externa, necesita un archivo real; pasar un objeto de archivo "vacío" no funcionará.
Andrei Volgin
8

La Fileclase representa la "idea" de un archivo, no un identificador real para usar en E / S. Es por eso que la Fileclase tiene un .exists()método para decirte si el archivo existe o no. (¿Cómo puedes tener un Fileobjeto que no existe?)

Por el contrario, la construcción de un new FileInputStream(new File("/my/file"))le da una secuencia real para leer bytes.

wberry
fuente
-1
FileReader r = new FileReader(file);

Utilice un lector de archivos para cargar el archivo y luego escribir su contenido en un búfer de cadena.

ejemplo

El enlace de arriba le muestra un ejemplo de cómo lograr esto. Como otra publicación de esta respuesta dice que debe cargar un archivo en la memoria, no necesita acceso de escritura siempre que no planee realizar cambios en el archivo real.

Cristian
fuente