2013-01-10 6 views
8

J'essaie d'ouvrir un fichier javafx FileChooser dans le répertoire de l'utilisateur selon un exemple que j'ai trouvé here.l'ouverture d'un fichier javafx FileChooser dans le répertoire de l'utilisateur

Voici un fragment de code simple que je me sers:

FileChooser fc = new FileChooser(); 
fc.setTitle("Open Dialog"); 
String currentDir = System.getProperty("user.dir") + File.separator; 
file = new File(currentDir); 
fc.setInitialDirectory(file); 

Cependant, je continue à obtenir cet avertissement (chemins de fichiers complets ont été tronqués):

Invalid URL passed to an open/save panel: '/Users/my_user'. Using 'file://localhost/Users/my_user/<etc>/' instead. 

Je vérifié que la file objet est un répertoire existant en ajoutant ces lignes:

System.out.println(file.exists()); //true 
System.out.println(file.isDirectory()); //true 

T alors je ne sais pas pourquoi j'obtiens le message d'avertissement.

MISE À JOUR:

Cela semble être un bug dans JavaFX: https://bugs.openjdk.java.net/browse/JDK-8098160 (vous devez créer un compte gratuit Jira pour voir le rapport de bogue). Ce problème se produit dans OSX, aucune idée sur les autres plates-formes.

Répondre

0

Essayez:

String currentDir = System.getProperty("user.home"); 
file = new File(currentDir); 
fc.setInitialDirectory(file); 
+0

essayée, mais le problème est toujours là – Sergio

+0

Avez-vous pu résoudre ce problème? ? J'ai rencontré le même problème .. – lochi

+0

Salut @lochi, voir ma mise à jour à la question – Sergio

6

C'est ce que je fini par faire et cela a fonctionné comme un charme.

Assurez-vous également que votre dossier est accessible lorsque vous essayez de le lire (bonne pratique). Vous pouvez créer le fichier et ensuite vérifier si vous pouvez le lire. Le code complet ressemblerait à ceci, par défaut à c: si vous ne pouvez pas accéder au répertoire utilisateur.

FileChooser fileChooser = new FileChooser(); 

//Extention filter 
FileChooser.ExtensionFilter extentionFilter = new FileChooser.ExtensionFilter("CSV files (*.csv)", "*.csv"); 
fileChooser.getExtensionFilters().add(extentionFilter); 

//Set to user directory or go to default if cannot access 
String userDirectoryString = System.getProperty("user.home"); 
File userDirectory = new File(userDirectoryString); 
if(!userDirectory.canRead()) { 
    userDirectory = new File("c:/"); 
} 
fileChooser.setInitialDirectory(userDirectory); 

//Choose the file 
File chosenFile = fileChooser.showOpenDialog(null); 
//Make sure a file was selected, if not return default 
String path; 
if(chosenFile != null) { 
    path = chosenFile.getPath(); 
} else { 
    //default return value 
    path = null; 
} 

Cela fonctionne sous Windows et Linux, mais peut être différent sur d'autres systèmes d'exploitation (non testé)

0
@FXML private Label label1; //total file path print 
@FXML private Label labelFirst; //file dir path print 

private String firstPath; //dir path save 

public void method() { 
    FileChooser fileChooser = new FileChooser(); 
    if (firstPath != null) { 
     File path = new File(firstPath); 
     fileChooser.initialDirectoryProperty().set(path); 
    } 
    fileChooser.getExtensionFilters().addAll(
      new ExtensionFilter("Text Files", "*.txt"), 
      new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"), 
      new ExtensionFilter("Audio Files", "*.wav", "*.mp3", "*.aac"), 
      new ExtensionFilter("All Files", "*.*")); 
    File selectFile = fileChooser.showOpenDialog(OwnStage); 
    if (selectFile != null){ 
     String path = selectFile.getPath(); 
     int len = path.lastIndexOf("/"); //no detec return -1 
     if (len == -1) { 
      len = path.lastIndexOf("\\"); 
     } 
     firstPath = path.substring(0, len); 
     labelFirst.setText("file path : " + firstPath); 
     label1.setText("First File Select: " + path); 
    } 

    } 
Questions connexes