IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

java.io.FileNotFoundException Windows XP


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut java.io.FileNotFoundException Windows XP
    Bonjour,

    j'ai écrit en Java une extension pour OpenOffice Writer (Japanese Integrated Learning Tool). Je dormais tranquille sur mes deux oreilles car j'avais testé le programme sous Linux et Windows 7 RC et il fonctionnait.
    J'ai reçu récemment un message d'un utilisateur sous Windows XP qui m'alerte sur un non fonctionnement.
    En bref le programme ne parvient pas à ouvrir les fichiers lexicaux.

    Voici le code que j'utilise pour retrouver les fichiers qui sont incorporés à l'archive (.oxt)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     //retrieve the path to the dictionary files
            XPackageInformationProvider xPackInfProv =PackageInformationProvider.get(m_xContext);
            stringURL = xPackInfProv.getPackageLocation("com.zoraldia.openoffice.Jilt");
            URL theURL = null;
            try {
                theURL = new URL(stringURL);
            } catch (MalformedURLException ex) {
                Logger.getLogger(Jilt.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            filePath = theURL.getPath() + File.separator + "description" + File.separator +
                    "resources" + File.separator;
            // a remettre filePath = s+File.separator;// filePath = userDir + File.separator + "jilt" + File.separator;// a remettre filePath = s+File.separator;
            m_edictDictionary = new Dictionary(filePath + "edict-u", "Edict");
            m_enamDictionary = new Dictionary(filePath + "enamdict-u", "Enam");
            m_kanjiDictionary = new KanjiDictionary(filePath + "kanjidic-u");
    et voici la class Dictionary

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    class Dictionary {
     
        String dicFileName = "";
        String signature = "";
        public boolean dictEnabled;
     
        /**
         * @param dicFileName A String representing the name of the edict  file which contains the dictionary entries
         * Each entry correspond to a line of the file
         * The dictionary must be EUC-JP coded.
         * @exception exceptions No exceptions thrown
         */
        Dictionary(String p_dicFileName, String p_signature) {
            dicFileName = p_dicFileName;
            signature = p_signature;
        }
     
        @SuppressWarnings("unchecked")
        ArrayList searchFromEnglish(String expression) {
            if (!dictEnabled) {
                return null;
            }
     
            ArrayList matches = new ArrayList();
     
            expression = expression.trim();
            BufferedReader i = null;
            try {
                i = new BufferedReader(new InputStreamReader(new FileInputStream(dicFileName), "UTF-8"));
                String str1 = null;
                while ((str1 = i.readLine()) != null) {
                    if (str1.contains(expression)) {
                        matches.add(str1);
                    }
     
                }
                i.close();
                return matches;
     
            } catch (Exception ex) {
                ex.printStackTrace(System.out);
                System.out.println(ex.getMessage());
                return null;
     
            } finally {
                try {
                    i.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                    System.out.println(ex.getMessage());
                    Logger.getLogger(Dictionary.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    Apparemment, le path est recréé correctement mais voici le genre de message d'erreur que je reçois (ici en mode debug ce qui explique le nom de répertoire temporaire dans le path)

    java.io.FileNotFoundException: C:\Documents%20and%20Settings\esoj\My%20Documents\NetBeansProjects\Jilt\build\soffice_debug\user\uno_packages\cache\uno_packages\D.tmp_\Jilt.oxt\description\resources\edict-u (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at com.zoraldia.openoffice.Dictionary.searchExactWritingMatches(Dictionary.java:196)
    at com.zoraldia.openoffice.DictionaryDialog.searchDictionary(DictionaryDialog.java:1000)
    at com.zoraldia.openoffice.DictionaryDialog.searchDictionary(DictionaryDialog.java:938)
    at com.zoraldia.openoffice.DictionaryDialog$buttonActionListener.actionPerformed(DictionaryDialog.java:453)
    at com.sun.star.bridges.jni_uno.JNI_proxy.dispatch_call(Native Method)
    at com.sun.star.bridges.jni_uno.JNI_proxy.invoke(JNI_proxy.java:178)
    at $Proxy38.execute(Unknown Source)
    at com.zoraldia.openoffice.DictionaryDialog.showDialog(DictionaryDialog.java:206)
    at com.zoraldia.openoffice.Jilt.dispatch(Jilt.java:391)
    Si je parcours le path manuellement je peux accéder au fichier (ici edict-u).

    Pour aller plus loin, j'ai introduit dans le programme les instructions suivantes;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File theDir=new File (filePath);
    System.out.println("Exist?= :"+theDir.exists());
    System.out.println("Can read?= :"+theDir.canRead());
    J'obtiens en retour;
    Exist?= false
    Can read?=: false

    Quelqu'un pourrait-il m'aider à comprendre ce qui ne va pas?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Peut-être les %20 à la place des espaces...

    Quel intérêt y-a-t'il à utiliser une URL pour générer un chemin vers un fichier local ?

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Peut-être les %20 à la place des espaces...



    a++
    Les %20 sont générés par le language lui-même. Pas par moi. Je vais quand même essayer de les enlever.

    Quel intérêt y-a-t'il à utiliser une URL pour générer un chemin vers un fichier local ?
    Y-a-t-il un autre moyen, sachant que je ne sais pas a priori où OpenOffice va placer le package?
    Puis-je utiliser la "String" retournée par xPackInf.getPackageLocation("nom du package") différemment et que ce soit valable pour toute les plateformes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XPackageInformationProvider xPackInfProv =PackageInformationProvider.get(m_xContext);
            stringURL = xPackInfProv.getPackageLocation("com.zoraldia.openoffice.Jilt");

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Dans ce cas il serait plus propre d'utiliser une URL tout du long et d'ouvrir le fichier avec la méthode openStream(). Sinon tu vas devoir gérer les différences de conversion entre une URL et une chemin local...

    a++

    PS : Au passage ton catch() devrait remonter une exception et non pas se contenter de logguer

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    [QUOTE=adiGuba;5169973]Dans ce cas il serait plus propre d'utiliser une URL tout du long et d'ouvrir le fichier avec la méthode openStream(). Sinon tu vas devoir gérer les différences de conversion entre une URL et une chemin local...

    Il me semble que j'utilise la méthode de lecture recommandée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     i = new BufferedReader(new InputStreamReader(new FileInputStream(dicFileName), "UTF-8"));
    Quant à l'utilisation d'une URL tout du long, que veux-tu dire exactement? Il faudra que je vérifie s'il est possible d'obtenir le chemin de mon package sous forme d'URL (ce que je n'ai pas encore trouvé).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Peut-être les %20 à la place des espaces...


    a++
    Effectivement en remplaçant les %20 ça marche.

    Merci pour ton aide.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/04/2010, 10h57
  2. Réponses: 2
    Dernier message: 10/10/2006, 09h33
  3. Java et API windows xp
    Par yael20 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 07/08/2006, 02h26
  4. java + sqlite sous Windows
    Par Invité dans le forum Général Java
    Réponses: 6
    Dernier message: 03/08/2006, 15h39
  5. Transformer un programme java en service windows
    Par daninho dans le forum Général Java
    Réponses: 41
    Dernier message: 15/01/2006, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo