Java FileOutputStream: chemin relatif du dossier de programme?
Quelle est la meilleure façon de trouver un chemin relatif au dossier dans lequel une application java est "installé"?
J'ai une classe avec une méthode statique: public static void saveToFile(String fileName)
Quand je l'appelle il avec un chemin absolu, il fonctionne, mais ce que je veux vraiment, c'est le chemin d'accès relatif à l'endroit où l'application est exécutée à partir de, et un dossier.
Je n'ai pas déployé mon application, mais je veux trouver un chemin d'accès relatif à l' (Netbeans) racine du projet, et un sous-dossier appelé de données: Nom_projet\data\fichier.dat. Dois-je utiliser le File
de classe ou d'en faire un URI
ou quelque chose?
Remarque que je la préfère à être indépendante du système et peuvent encore fonctionner si l'application est déployée. Finalement, la (relative) chemin d'accès sera stocké dans un propriétés fichier.
Désolé si cette question est un doublon, toute aide est appréciée.
OriginalL'auteur MarioDS | 2012-04-16
Vous devez vous connecter pour publier un commentaire.
OS fabricants ont dit depuis longtemps de ne pas enregistrer les fichiers dans le répertoire de l'application. Au lieu de mettre le
File
dans unsub-directory
deuser.home
. D'accueil de l'utilisateur est où il devrait être possible de créer un objet de fichier qui peut être lu ou écrit. C'est aussi un lieu qui est reproductible à travers les pistes, et indépendant de la plateforme.Puis une option de déploiement, vous devez examiner est Java Web Start. Non seulement cela fait-il de l'installation un jeu d'enfant pour l'utilisateur final (cliquez sur un lien & OK les invites), mais il offre également la
PersistenceService
pour stocker de petites quantités de données. Voici un petit la démo. de laPersistenceService
.Si les cas d'utilisation nécessite de stocker de grandes quantités de données, le service de persistance ne pas être approprié pour les données elles-mêmes, mais peuvent, au lieu de stocker l' (absolue) d'accès à l'endroit où les données sont stockées. De cette façon, vous pourriez avoir un par défaut chemin pointant vers
user.home
, mais si l'utilisateur choisit un emplacement différent, magasin de endroit en utilisant le service de persistance.Une application. lancé à l'aide de témoins de jéhovah a une sécurité de sable-zone par défaut. Pour écrire dans le système de fichiers local exige que la sablière être détendu. Qui nécessite le développeur pour signer numériquement les Pots de l'application. & demande
all-permissions
dans le fichier de démarrage, et pour l'utilisateur d'accepter le code signé lorsque vous y êtes invité.Que d'un côté. Soleil a décidé il y a quelques temps que l'utilisation du domaine de la protection de trouver l'emplacement de la cache des Jarres avait un risque de sécurité. Pour cette raison, ils ont décidé que les informations retournées serait toujours pointer vers le serveur, pour les deux applets & JWS apps. Ou en d'autres termes, le domaine de la protection ne sera pas de point pour le système de fichiers local, même si l'application. est mis en cache localement.
OriginalL'auteur Andrew Thompson
Si vous déployez et comme un pot, il est possible d'obtenir le pot de nom de fichier et le chemin d'accès le code actuel est le fait de travailler comme ceci:
(à partir de Comment obtenir le chemin d'accès d'un fichier JAR?)
possible. De l'essayer.
très utile. merci
OriginalL'auteur j13r
Pour trouver chemin relatif au répertoire de travail courant dire
new File(".")
.Si vous voulez connaître le chemin absolu du répertoire de travail actuel, vous pouvez écrire
new File(".").getAbsolutePath()
ou d'un Fichier(".").getAbsoluteFile()`.J'espère que cela répond à votre question. Je suis désolé si je ne vous comprends pas correctement.
J'ai essayé en utilisant
"." + File.separator + "data" + File.separator + "file.dat"
Et ça ne fonctionne pas...Bon j'ai essayé avec un Fichier et j'ai imprimé le chemin d'accès absolu, son absolument correct et ça ne fonctionne pas... Il retourne
C:\blah\projectName\data\file.dat
...utiliser le Fichier("./nom de fichier") . Il s'agit de ../espace de travail/myWorkingProject/filename
OriginalL'auteur AlexR
Ici, vous allez:
OriginalL'auteur Craig R
Pour obtenir le chemin absolu vers un fichier nouveau Fichier().getCanonicalFile().
OriginalL'auteur tak3shi