JFileChooser / FileWriter不允许我保存在C:盘的根目录中

时间:2013-11-05 17:58:10

标签: java swing jfilechooser filewriter bufferedwriter

我在玩,我用摇摆做了一个类似记事本的应用程序。到目前为止一切正常,除了它不让我直接在C:/上保存文本文件。在任何其他磁盘上,包括D:驱动器的根目录,或在C:/磁盘的文件夹中,它就像一个魅力。为什么会这样?

这是我的代码:

   file_save.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                JFileChooser Chooser = new JFileChooser();
                File DefaultDirectory = new File("C:/");
                File Path;
                int Checker;
                FileFilter text_filter = new FileNameExtensionFilter(
                        "Text File (*txt)", "txt");
                FileFilter another_filter = new FileNameExtensionFilter(
                        "Debug Filter (*boyan)", "boyan");
                //
                Chooser.setCurrentDirectory(DefaultDirectory);
                Chooser.setDialogTitle("Save a file");
                Chooser.addChoosableFileFilter(text_filter);
                Chooser.addChoosableFileFilter(another_filter);
                Chooser.setFileFilter(text_filter);
                Checker = Chooser.showSaveDialog(null);
                //
                if (Checker == JFileChooser.APPROVE_OPTION) {
                    Path = Chooser.getSelectedFile();
                    System.out.println(Path.getAbsolutePath());
                    ;// Just for
                        // debugging.

                    BufferedWriter writer = null;
                    try {
                        writer = new BufferedWriter(new FileWriter(Path
                                .getAbsolutePath()));
                        String[] myString = textArea.getText().split("\\n");
                        for (int i = 0; i < textArea.getLineCount(); i++) {
                            writer.append(myString[i]);
                            writer.newLine(); // SO IT CAN PRESERVE NEW LINES
                                                // (APPEND AND SPLIT ARE ALSO
                                                // THERE
                                                // BECAUSE OF THAT)
                            writer.flush();
                        }

                        JOptionPane.showMessageDialog(null, "File saved.", "",
                                JOptionPane.WARNING_MESSAGE);

                    } catch (IOException e) {
                        JOptionPane.showMessageDialog(null,
                                "File did not save successfuly.", "",
                                JOptionPane.WARNING_MESSAGE);
                    } finally {
                        try {
                            if (writer != null)
                                writer.close();
                        } catch (IOException e) {
                            JOptionPane.showMessageDialog(null,
                                    "File did not save successfuly.", "",
                                    JOptionPane.WARNING_MESSAGE);
                        }
                    }

                }

            }
        });

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

通常,C:\中没有写权限。

  • 以特权用户身份启动应用

    不应该这样做,因为它不是OS设计的目的。分别更改C:\或系统驱动器的权限是不行的。

  • 保存到System.getProperty("user.home");的子目录(方式去)

    例如,用户家庭也可以是在域网络中具有高度备份的网络文件夹。特别是对于远程会话(RDP,Citrix),情况往往如此。

如果您绝对需要在用户文件夹之外安装静态文件,请使用安装程序将其配置为提升权限(UAC)。