2016-03-10 4 views
1

Je voudrais permettre aux utilisateurs de mon programme d'ouvrir des fichiers uniquement à partir d'un certain répertoire dans le dossier du projet. Sur Stack Overflow, je trouve souvent la solution suivante: chooser.setInitialDirectory(new File(System.getProperty("user.home"));, mais j'essaie de référencer le dossier des ressources dans le projet. J'ai essayé d'utiliser fileChooser.setInitialDirectory(new File("/resources/")); mais j'obtiens java.lang.IllegalArgumentException: Folder parameter must be a valid folder. Comment puis-je résoudre ce problème?Définir le répertoire initial de JavaFX FileChooser

+1

Le dossier 'resources' ne fait généralement pas partie d'une application déployée. Lorsque vous déployez votre application, les ressources seront regroupées dans le fichier jar. Vous ne pouvez pas utiliser un sélecteur de fichier pour parcourir le contenu de celui-ci. –

+0

OK, mais comment puis-je parcourir le contenu d'un autre dossier faisant partie de l'application déployée? – lilmessi42

+0

Pouvez-vous expliquer plus complètement ce que vous essayez de faire? Vous utilisez un navigateur de fichiers pour permettre à l'utilisateur de parcourir le système de fichiers; le point étant que le contenu du système de fichiers est inconnu lorsque vous construisez l'application. Les ressources disponibles sont connues lorsque vous compilez et construisez l'application. Donc typiquement vous ne naviguez pas pour les ressources; les ressources sont sélectionnées en fonction de l'état de l'application. Ainsi, l'utilisateur fait des choses dans l'interface utilisateur qui changent l'état de l'application, et votre code choisit parmi un ensemble prédéterminé de ressources basées sur cet état. –

Répondre

1

Le dossier resources, et en gros tout ce qui fait partie de votre application déployée, n'est pas accessible en écriture ou consultable à l'exécution. Essentiellement, lorsque vous déployez votre application, tout ce dont vous avez besoin pour exécuter l'application est regroupé dans un fichier d'archive, alors resources n'est pas vraiment un dossier, c'est une entrée dans une archive. Vous ne pouvez pas écrire ou parcourir ces emplacements.

Si vous souhaitez que l'utilisateur puisse enregistrer des fichiers dans un emplacement spécifique, vous devez définir un tel emplacement: généralement, vous en feriez un sous-répertoire du répertoire de base de l'utilisateur. Par exemple, vous pouvez le faire:

File recordsDir = new File(System.getProperty("user.home"), ".myApplicationName/records"); 
if (! recordsDir.exists()) { 
    recordsDir.mkdirs(); 
} 

// ... 

FileChooser chooser = new FileChooser(); 
chooser.setInitialDirectory(recordsDir);