2017-05-29 42 views
0

我有這個小應用程序與JButton打開JFileChooser來選擇多個文件。所以當我點擊它的approve button時,我應該能夠將所有選定文件的絕對路徑或名稱設置爲JTextField(在我的情況下,它的格式爲jTextField1)。如何通過JFileChooser將所有選定的文件絕對路徑/名稱設置爲JTextField

我知道,如果我只選擇了1個文件如何做到這一點,但不能與多個選定的文件

我怎樣才能做到這一點???

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    JFileChooser copy = new JFileChooser(); 
    copy.setApproveButtonText("Copy"); 
    copy.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); 
    copy.setMultiSelectionEnabled(true); 
    int copyDialog = copy.showOpenDialog(null); 
    File[] files = copy.getSelectedFiles(); 
    if (copyDialog == JFileChooser.APPROVE_OPTION) { 
     if(files.length>=2){ 
      jTextField1.setText(files.toString()); // I need to set jTextField1's text with all the selected file paths or names 
     }else{ 
      jTextField1.setText(copy.getSelectedFile().getAbsolutePath().toString()); 
     } 
    } else { 

    } 
} 
+0

調用'toString'數組不做你會期待它。改爲使用'java.util.Arrays :: toString'。 –

+0

你能舉個例子嗎? @ M.Prokhorov –

+0

當然,例如:'java.util.Arrays.toString(new Object [] {「a」,「b」,「c」})''。 –

回答

2

你可以收集並用流加盟文件:

Arrays.stream(files) 
     .map(File::getAbsolutePath) 
     .collect(Collectors.joining("\n")); 

這將通過斷行加入路徑。您可以根據需要更改您的分隔符。在這種情況下,沒有必要爲您的if(files.length>=2)

如果這是不可能用java 8,您可以創建創建完整的字符串的方法:

private String getPaths(File[] files) { 
    if (files == null || files.length == 0) { 
     return ""; 
    } 
    StringBuilder paths = new StringBuilder(); 
    paths.append(files[0].getAbsolutePath()); 
    for (int i = 1; i < files.length; i++) { 
     paths.append('\n'); 
     paths.append(files[i].getAbsolutePath()); 
    } 
    return paths.toString(); 
} 
+0

沒有方法稱爲** stream()**認爲'Arrays' –

+0

@ user7980830它帶有[java 8](https://docs.oracle.com/javase/8/ docs/api/java/util/Arrays.html#stream-T:A-) –

+0

先生,您可否請您提供適用於早期版本Java的解決方案?這將是一個很大的幫助。 –

相關問題