1

我正在玩,我使用 swing 制作了一个类似记事本的应用程序。到目前为止一切正常,除了它不允许我将文本文件直接保存在 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);
                        }
                    }

                }

            }
        });

提前非常感谢!

4

1 回答 1

1

通常,一个人在C:\.

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

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

  • 保存到System.getProperty("user.home");(方法)

    的子目录中,例如,用户主目录也可以是在域网络中具有几乎备份的网络文件夹。尤其是对于远程会话(RDP、Citrix),情况往往如此。

如果您绝对需要在用户文件夹之外安装静态文件,请使用安装程序执行一次,并配置为提高权限 (UAC)。

于 2013-11-05T18:03:40.570 回答