Créer un objet File en mémoire à partir d'une chaîne en Java

113

J'ai une fonction qui accepte File comme argument. Je ne veux pas créer / écrire un nouveau fichier (je n'ai pas d'accès en écriture au système de fichiers) afin de transmettre mes données de chaîne à la fonction. Je dois ajouter que les données String n'existent pas dans un fichier (je ne peux donc pas lire mes données à partir d'un fichier).

Puis-je utiliser des flux et les «convertir» en objets File?

Jon Romero
la source
2
Pouvez-vous lier / publier le code qui prend un Fileobjet? Comme les réponses l'ont indiqué, un Fileobjet est comme une référence à un emplacement dans le système de fichiers, et serait donc difficile à simuler sans un fichier réel. Si, cependant, votre fonction a pris un FileReaderou un FileInputStream, vous pouvez facilement modifier le code pour accepter l'entrée non-fichier.
101100
Les fichiers mappés en mémoire peuvent être votre choix. Ce sont des fichiers spéciaux en Java qui permettent au programme Java d'accéder au contenu directement à partir de la mémoire. Pour plus de détails, veuillez passer par ce lien: javarevisited.blogspot.com/2012/01
Bacteria

Réponses:

48

Non; les instances de classe Filereprésentent un chemin dans un système de fichiers. Par conséquent, vous ne pouvez utiliser cette fonction qu'avec un fichier. Mais peut-être y a-t-il une surcharge qui prend un à la InputStreamplace?

meriton
la source
76

Habituellement, lorsqu'une méthode accepte un fichier, il existe une autre méthode à proximité qui accepte un flux. Si ce n'est pas le cas, l'API est mal codée. Sinon, vous pouvez utiliser des fichiers temporaires, pour lesquels l'autorisation est généralement accordée dans de nombreux cas. S'il s'agit d'applet, vous pouvez demander une autorisation en écriture .

Un exemple:

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
la source
1
Impossible de demander l'autorisation d'écriture (c'est Google AppEngine)
Jon Romero
12

Un objet File en Java est une représentation d'un chemin vers un répertoire ou un fichier, pas le fichier lui-même. Vous n'avez pas besoin d'avoir un accès en écriture au système de fichiers pour créer un Fileobjet, vous n'en avez besoin que si vous avez l'intention d'écrire réellement dans le fichier (en utilisant un FileOutputStream par exemple)

Kevin K
la source
1
Si vous avez besoin de transmettre un fichier à une API externe, vous avez besoin d'un fichier réel - transmettre un objet File "vide" ne fonctionnera pas.
Andrei Volgin
8

La Fileclasse représente «l'idée» d'un fichier, pas un descripteur réel à utiliser pour les E / S. C'est pourquoi la Fileclasse a une .exists()méthode, pour vous dire si le fichier existe ou non. (Comment pouvez-vous avoir un Fileobjet qui n'existe pas?)

En revanche, la construction de a new FileInputStream(new File("/my/file"))vous donne un flux réel à partir duquel lire les octets.

wberry
la source
-1
FileReader r = new FileReader(file);

Utilisez un lecteur de fichiers pour charger le fichier, puis écrivez son contenu dans un tampon de chaîne.

exemple

Le lien ci-dessus vous montre un exemple de la façon d'accomplir cela. Comme le disent d'autres articles sur cette réponse, pour charger un fichier en mémoire, vous n'avez pas besoin d'un accès en écriture tant que vous ne prévoyez pas de modifier le fichier réel.

Cristian
la source