2011-08-16 11 views
68

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).Crear un objeto File en la memoria desde una cadena en Java

¿Puedo usar Streams y "lanzarlas" a objetos File?

+2

¿Puedes vincular/publicar el código que toma un objeto 'File'? Como las respuestas han indicado, un objeto 'File' es como una referencia a una ubicación en el sistema de archivos, por lo que sería difícil simular sin un archivo real. Sin embargo, si su función tiene un 'FileReader' o un' FileInputStream', puede modificar el código fácilmente para aceptar entradas que no sean de archivo. – 101100

+0

Los archivos mapeados en memoria pueden ser su elección. Estos son archivos especiales en Java que permiten que el programa Java acceda a los contenidos directamente desde la memoria. Para más detalles, vaya a este enlace: http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

Respuesta

32

No; 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?

+0

No:/Sin función de sobrecarga –

-1
FileReader r = new FileReader(file); 

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

example

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

7

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

3

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, la construcción de un new FileInputStream(new File("/my/file")) le da una secuencia real para leer bytes.

+2

Buen punto; no responde la pregunta sin embargo. – Jus12

47

Normalmente, 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 el permiso generalmente se otorga en muchos casos. Si es un applet, puede request write permission.

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) { 
} 
+0

No se puede solicitar permiso de escritura (es Google App Engine) –

Cuestiones relacionadas