最近遇到一個需求,下載ftp到本地系統,需要開啟一個檔案儲存對話方塊。本地作業系統要支援windows、linux和mac。所以考慮用java的javax.swing.JFileChooser;
於是,寫了個測試程式如下:
代碼
public static void main(String[] args) {
String retStr = "";
JFileChooser c=new JFileChooser();
c.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
c.setDialogTitle("請選擇下載的目標檔案夾");
c.setDialogType(JFileChooser.SAVE_DIALOG);
int ret = c.showSaveDialog(null);
if(ret==JFileChooser.CANCEL_OPTION){
retStr = "";
}
else if(ret==JFileChooser.APPROVE_OPTION){
retStr = c.getSelectedFile().getAbsolutePath();
System.out.println(retStr);
//System.out.println(System.getProperty("os.name"));
}
else if(ret==JFileChooser.ERROR_OPTION){
retStr = "";
}
}
在windows下運行沒有問題,能正常得到儲存的檔案夾地址,但是到了MAC下,發現奇怪現象,比如如果選中/Volume/ftptest/,並且雙擊開啟,得到的路徑將是/Volume/ftptest/ftptest/ ,也就是目標檔案夾會重複,但是若直選中檔案夾,而不進入,將返回正確路徑。。。
初步判定是JFileChooser的showSaveDialog對跨平台支援不好,或者是MAC系統對java支援不好。後來遍尋解決方案,在一老外的部落格上看到解決辦法:
The problem occurs when you use chooser.showDialog or chooser.showSaveDialog instead of chooser.showOpenDialog. On XP chooser.showDialog returns the correct path under the example given by the OP, but on Mac OS 10.5.7 (and probably earlier versions as well) you'll get ~/Desktop/Desktop .
敢情在MAC上不要用showDialog和showSaveDialog。。。。
所以,上面代碼中showSaveDialog改為showOpenDialog,問題解決。