2013-01-10 19 views
8

Sto tentando di aprire un FileChooser javafx nella directory utente in base a un esempio che ho trovato here.aprire un FileChooser javafx nella directory utente

Ecco un frammento del semplice codice che sto usando:

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

Tuttavia, continuo ottenendo questo avvertimento (percorsi di file completi sono stati troncati):

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

ho verificato che il file oggetto è una directory esistente aggiungendo queste righe:

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

T non ho idea del motivo per cui sto ottenendo il messaggio di avvertimento.

UPDATE:

questo sembra essere un bug in JavaFX: https://bugs.openjdk.java.net/browse/JDK-8098160 (è necessario creare un account gratuito Jira per vedere il bug report). Questo problema si verifica in OSX, non ho idea di altre piattaforme.

risposta

0

Prova:

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

provato, ma il problema è ancora lì – Sergio

+0

Sei riuscito a risolvere questo problema? ? Mi sono imbattuto nello stesso problema .. – lochi

+0

ciao @lochi, vedi il mio aggiornamento alla domanda – Sergio

6

Questo è quello che ho finito per fare e ha funzionato come un fascino.

Inoltre, assicurarsi che la cartella sia accessibile quando si tenta di leggerla (buona pratica). È possibile creare il file e quindi verificare se è possibile leggerlo. Il codice completo sarebbe quindi simile a questo, in modo predefinito sull'unità c: se non è possibile accedere alla directory utente.

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; 
} 

Questo funziona su Windows e Linux, ma potrebbe essere diverso su altri sistemi operativi (non testato)

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); 
    } 

    } 
Problemi correlati