2009-11-25 7 views
2

J'ai une application Web Start qui doit enregistrer un fichier texte. Je voudrais savoir où je devrais écrire le fichier, de sorte qu'il va dans un endroit propre indépendamment de la plate-forme sur laquelle il s'exécute.Quel est le bon endroit pour enregistrer un fichier dans une application Java?

Si je reçois mon filepath comme ça ...

new File(System.getProperty("user.dir") + System.getProperty("file.separator") + "test.txt); 

... alors le fichier est écrit quelque part belle et peu visible sur Linux, mais sur le bureau sous Windows, à côté de l'icône que je suis en cours d'exécution le programme de, et ce n'est pas idéal parce que l'utilisateur ne doit pas nécessairement besoin de savoir ou de se soucier que le fichier existe.

est-il une bonne façon, la plate-forme indépendante d'obtenir un chemin de fichier qui me permet d'enregistrer un fichier quelque part discret? Je me fiche de l'endroit où il se trouve, à condition qu'il ne soit pas entièrement visible sur le bureau.

Merci.

Neil

Répondre

2

Si vous ne avez pas besoin du fichier par utilisateur ou d'être incroyablement permanente, vous pouvez utiliser System.getProperty (« java.io.tmpdir »));

+0

Merci. En fait, il doit être permanent. –

6

Qu'en est-il en utilisant un sous répertoire .yourappuser.home à la place? Vous ne devriez pas rencontrer de problème d'autorisation, un utilisateur Windows ne le remarquera pas vraiment, il sera caché sur GNU/Linux. Pour les choses temporaires, vous pouvez préférer java.io.tmpdir mais gardez à l'esprit que le contenu de ce répertoire (/tmp sur GNU/Linux) pourrait être effacé lors du redémarrage (par exemple avec les distributions Debian). Donc, c'est vraiment pour des choses temporaires. PS: Je préfère utiliser File.separator par dessus System.getProperty("file.separator")

+0

@Pascal - vous devriez dire que le contenu du dossier/tmp' peuvent être supprimés. Historiquement, les systèmes UNIX ont souvent une tâche cron pour supprimer les fichiers « anciens » et/ou des répertoires de '/ tmp' et autres lieux semblables. –

+0

@Stephen Vous avez absolument raison, désolé pour l'inexactitude. J'ai réparé ça. Je vous remercie. –

+0

Génial. Merci pour ça. –

10

user.dir est le répertoire de travail courant; utiliser user.home à la place et java.io.tmpdir pour les fichiers temporaires.

Voici le list of predefined properties pour Java 1.5.

+0

Merci. user.dir c'est. –

5

Je suggère fortement l'utilisation du PersistenceService.

+0

Merci. Ayant regardé ça, ça ne semble pas avoir pour but de faire ce que je veux, mais je me souviendrai que ça existe. –

1

Comme d'autres l'ont dit, « user.home » est un bon choix. Si vous pouvez vous en sortir, les préférences sont un autre bon choix pour stocker certaines choses.

Si vous faites finissez par utiliser quelque chose comme "user.home" alors assurez-vous que vous avez une position de repli. J'ai été dans de nombreuses situations où le répertoire personnel d'un utilisateur n'était pas accessible en écriture (verrouillé les installations de Windows sous un serveur de domaine par exemple).

Si vous stockez des données dans le répertoire « user.home », puis le mettre sous « .myApp style » sous-répertoire et vérifiez d'abord que vous pouvez créer ce répertoire. Si vous ne pouvez pas créer ce répertoire, vous pouvez toujours demander à l'utilisateur un emplacement pour le stocker. Et puis stocker cet emplacement dans une préférence système afin qu'il soit connu la prochaine fois que l'application est exécutée.

+0

Excellent. Merci à tous pour vos conseils informatifs. –

Questions connexes