2017-03-06 2 views
1

Mon application génère une exception - java.io.FileNotFoundException: Chemin de fichier non valide. Pas certain de pourquoi. J'ai lu les questions et réponses sur le thème mais personne ne pouvait m'aider.Exception de chemin de fichier non valide

Voici le code:

String userhome = System.getProperty("user.home"); 
    String filename = null; 
    File rdp = null; 
    for (int item = 0; item < darab; item++) { 
     filename = toValidFileName(ProgramList.get(item).getP_name()); 
     filename += ".rdp"; 
     rdp = new File(userhome, filename); 
     try { 
      JFrame panel; 
      panel = new JFrame(); 
      panel.setSize(400, 10); 
      panel.setLocation(300, 400); 
      panel.setTitle("Saving " + rdp.getAbsolutePath()); 

      try (FileOutputStream fstr = new FileOutputStream(rdp)) { 
       panel.setVisible(true); 
       char c; 
       for (int j = 0; j < 2336; j++) { 
        c = ProgramList.get(item).p_body.charAt(j); 
        fstr.write(c); 
       } 
       fstr.flush(); 
       fstr.close(); 
       panel.setVisible(false); 
      } 

     } catch (IOException ioe) { 
      JOptionPane.showMessageDialog(this, 
        ioe.getMessage(), "Save rdp file", JOptionPane.ERROR_MESSAGE); 
      System.err.println(ioe.getMessage() + " : "+ rdp.getAbsoluteFile()); 
     } 
    } 

Et le résultat: chemin de fichier non valide: C: \ Users \ LIPI \ CosmicLd.rdp

toValidFilename() est de supprimer les caractères interdits du (KORG RADIAS) nom du programme pour créer un nom de fichier valide.

Je n'ai pas trouvé ma faute :( Le répertoire de destination est lu non seulement, l'utilisateur dispose des privilegs nécessaires Quand je regarde la file.canWrite() après la ligne. rdp = new File (userhome, nom de fichier), il est toujours faux Qu'est-ce que je fait de mal Merci

+0

Si j'ai choisi un fichier pour écrire par un filechooser c'est du travail. –

+1

Souhaitez-vous publier la trace de la pile et le code toValidFileName? – efekctive

+0

S'il vous plaît choisir le même fichier avec le fichier-choser et imprimer le nom du fichier. Comparez le nom à celui qui échoue. Soyez à l'affût des espaces blancs. – Arkadiy

Répondre

0

essayez d'utiliser FileWriter au lieu de votre essai ressemblera à ceci:

try { 
    File dir = new File("C:/Users//" + userhome + "/Documents"); //customize this however 
    FileWriter fstr = new FileWriter(new File(dir, rdp)); 
      for (int j = 0; j < 2336; j++) { 
       c = ProgramList.get(item).p_body.charAt(j); 
       fstr.write(c); 
         } 
      fw.close(); 
     } 

aussi, essayez de coller à Java Naming variable.?!. conventions, userhome doit être userHome, etc. st une chose mineure :)

+0

Pourquoi pensez-vous que cela aiderait dans cette situation? – matt

+0

Filewriter a prouvé à moi-même comme logique et simple. Mon espoir est que l'entrée simplifiée résoudra le problème, parce que mon meilleur pari est que leur code ne génère/lit pas les bons chemins. – Jerevand

0

Le problème a été généré en cette ligne:

filename = toValidFileName(ProgramList.get(item).getP_name()); 

avec les résultats getP_name(), becouse parfois il a (char) 0 caractères ...

Le code est réécrit -> les caractères (char) 0 sont changés en (char) 20 caractères dans l'objet et de cette façon tout fonctionne.

Le code toValidFileName de toute façon ceci:

public static String toValidFileName(String input) { 
    return input.replaceAll("[:\\\\/*\"?|<>']", "_"); 
} 

Merci à tous pour votre aide! Il y a quelques conseils utiles en particulier les conseils d'Arkady et de VGR!