2016-06-28 10 views
1

Здравствуйте, ребята, прошло какое-то время. Поэтому я работаю над этим приложением, которое позволяет мне создавать и сохранять документы бла-бла-бла. Это не в центре внимания этого вопроса. Поэтому в функции сохранения я решил использовать JFileChooser, чтобы разрешить пользователю выбирать местоположение для сохранения файла.Почему JFileChooser работает таким образом?

Теперь мой JFileChooser запускает правильно, вот код, который:

public void Save() { 
     choicer.setCurrentDirectory(new java.io.File("C://")); 
     choicer.setDialogTitle("Save Document"); 
     choicer.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     choicer.setAcceptAllFileFilterUsed(false); 
     if (choicer.showSaveDialog(new JPanel()) == JFileChooser.APPROVE_OPTION) { 
      dir = String.valueOf(choicer.getCurrentDirectory()); 
     } 

     File f = new File(dir + "\\hi.txt"); 
    } 

Игнорировать имя hi.txt. Это я остановлюсь позже.

Теперь есть 2 проблемы, которые я нашел. Прежде всего, мне нужно сделать одну папку «глубоко», чтобы сохранить файл. Объяснение:
Допустим, я хочу, чтобы сохранить свой файл в Общественности в пользователей, мой каталог выглядит следующим образом:

C: \ Users \ Public
Теперь мой код добавляет \ hi.txt в параметры файла, не следует сохранять в общей папке. Если бы я просто сохранить там после открытия общественности, я получаю исключение:

java.io.FileNotFoundException: C:\Users\Public (Access is denied) 
at java.io.FileOutputStream.open0(Native Method) 
at java.io.FileOutputStream.open(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileOutputStream.<init>(Unknown Source) 
at java.io.FileWriter.<init>(Unknown Source) 
at Spreadr$TableMethods.Save(Spreadr.java:175) 
at Spreadr.lambda$1(Spreadr.java:85) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.AbstractButton.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

Если я однако открыть папку в общественных местах, а затем нажмите кнопку сохранения, мой каталог теперь выглядит следующим образом:

C: \ Users \ Public \ Downloads

Затем он не сохраняется в папке «Загрузка», а в папке «Общий пользователь».

Это моя первая проблема. Моя вторая - это мини-тип вопроса. Возможно ли, чтобы я назвал свой файл в меню «Сохранить» (меню JFileChooser)?

+2

Я не думаю, что вы хотите использовать 'getCurrentDirectory', попробуйте' getSelectedFile', а также при создании окончательного файла , вы можете использовать две версии аргумента файла. 'new File (dir, «hi.txt»); ' – matt

ответ

2

Ваш код вызывает choicer.getCurrentDirectory(), который предоставит вам родительский каталог того или иного каталога, в котором вы находитесь, при выборе каталога в режиме JFileChooser.DIRECTORIES_ONLY.

Вы, вероятно, хотите получить каталог, который вы выбрали, который вы получите по телефону

choicer.getSelectedFile() 
Смежные вопросы