我在玩,我用摇摆做了一个类似记事本的应用程序。到目前为止一切正常,除了它不让我直接在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);
}
}
}
}
});
提前多多感谢!
答案 0 :(得分:1)
通常,C:\
中没有写权限。
以特权用户身份启动应用
不应该这样做,因为它不是OS设计的目的。分别更改C:\
或系统驱动器的权限是不行的。
保存到System.getProperty("user.home");
的子目录(方式去)
例如,用户家庭也可以是在域网络中具有高度备份的网络文件夹。特别是对于远程会话(RDP,Citrix),情况往往如此。
如果您绝对需要在用户文件夹之外安装静态文件,请使用安装程序将其配置为提升权限(UAC)。