Crear un objeto de archivo en memoria a partir de una cadena en Java


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 cadena no existen en un archivo (por lo que no puedo leer mis datos de un archivo).

¿Puedo usar Secuencias y "enviarlas" a objetos de archivo?

Author: Jon Romero, 2011-08-16

5 answers

No; las instancias de la clase File representan 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 un InputStream en su lugar?

 37
Author: meriton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 19:20:05

Por lo general, cuando un método acepta un archivo, hay otro método cercano que acepta una secuencia. Si este no es el caso, la API está mal codificada. De lo contrario, puede utilizar archivos temporales, donde el permiso se concede generalmente en muchos casos. Si es un applet, 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) {
}
 55
Author: Chris Dennett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:39

Un objeto File 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 objeto File, solo lo necesita si tiene la intención de escribir realmente en el archivo (usando un FileOutputStream por ejemplo)

 8
Author: Kevin K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 19:17:58

La clase File representa la "idea" de un archivo, no un identificador real para usar para E/S. Esta es la razón por la cual la clase File tiene un método .exists(), para decirle si el archivo existe o no. (¿Cómo puede tener un objeto File que no existe?)

Por el contrario, construir un new FileInputStream(new File("/my/file")) le da un flujo real para leer bytes.

 4
Author: wberry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 19:17:59
FileReader r = new FileReader(file);

Use un lector de archivos cargue el archivo y luego escriba su contenido en un búfer de cadena.

Ejemplo

El enlace anterior le muestra un ejemplo de cómo lograr esto. Como otros post a esta respuesta dicen para cargar un archivo en la memoria que no necesita acceso de escritura, siempre y cuando no planea hacer cambios en el archivo real.

 -1
Author: Cristian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-16 19:24:32