web-dev-qa-db-fra.com

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

J'ai une fonction qui accepte le fichier 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 devrais ajouter que les données de chaîne n'existent pas dans un fichier (je ne peux donc pas lire mes données d'un fichier).

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

100
Jon Romero

Non; les instances de classe File repré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 at-il une surcharge qui prend plutôt un InputStream?

44
meriton

Généralement, lorsqu'une méthode accepte un fichier, une autre méthode à proximité accepte un flux. Si ce n'est pas le cas, l'API est mal codée. Sinon, vous pouvez utiliser des fichiers temporaires, où l'autorisation est généralement accordée. Si c'est une applet, vous pouvez demander une permission d'é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) {
}
62
Chris Dennett

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

10
Kevin K

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

En revanche, la construction d'une new FileInputStream(new File("/my/file")) vous donne un flux réel à partir duquel lire des octets.

6
wberry