Java comment accéder à un fichier situé dans le répertoire au dessus de mon projet


J'ai réussi à trouver des sujets similaires à celui-ci, mais rien jusqu'à présent n'a correspondu exactement à cette question. Je crée une application JavaFX où l'utilisateur peut ajouter des images à afficher dans l'application. Ces images sont stockées sous forme de chaînes filepath dans une base de données de fichiers texte. Depuis .les fichiers jar sont en lecture seule, je ne peux pas ajouter l'image directement dans le projet, j'ai donc eu recours à la création d'un dossier d'actifs qui se trouve juste à l'extérieur du projet dans lequel les images se trouvent toutes.

Donc la structure du dossier est:

-> Parent Folder that the .jar file sits in
    - Project Folder or .jar file 
        - src
            * classes.java
    - assets Folder
        * image.jpg
        * image2.png

Maintenant, je sais que Image image = new Image(getClass().getResourceAsStream(imagePath)); fonctionnera si mon imagePath est dans le dossier du projet. Mais j'ai besoin du chemin relatif (et en dehors de) du dossier.

Ma première question (et, pour l'instant, la plus importante) est de savoir comment puis-je énoncer ce chemin relatif qui sort complètement des dossiers de l'application?

, Deuxièmement, est-ce une bonne pratique? Si l'on crée une application JavaFX et souhaite ajouter de nouvelles images à stocker avec l'application, existe-t-il un meilleur moyen de de le faire?

Author: officeface, 2017-12-14

1 answers

Donc, en tirant parti de Obtenir le Répertoire de Travail en cours en Java, pour sortir de votre pot, vous pouvez utiliser FileInputStreams pour obtenir votre Image. s. Par exemple

String cwd = System.getProperty("user.dir");
File dirAboveCws = new File(cwd).getParentFile();
File[] imageFiles = dirAboveCws.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return !pathname.getName().contains("jpg");
    }
});

for (File imageFile : imageFiles) {
    FileInputStream fileInputStream = new FileInputStream(imageFile);
    Image image = ImageIO.read(fileInputStream);  // Here is your image
}

Pour ce qui est de savoir si c'est une bonne idée, cela craint que le stockage de vos images dépende du répertoire de travail actuel. IMO vous devez utiliser un sous-dossier préfixé par des points du répertoire personnel de l'utilisateur (System.getProperty("user.home")) pour stocker vos données d'application

 0
Author: benashby, 2017-12-13 23:29:29