我有以下代码:
private void saveAs()
{
CDocument currentDocument=this.panelMain().openedDocuments().get(this.panelMain().openedDocuments().size()-1);
StyledDocument contents=currentDocument.getStyledDocument();
DefaultEditorKit kit=new DefaultEditorKit();
JFileChooser chooserSaveAs=new JFileChooser();
chooserSaveAs.setDialogTitle("Save as ...");
if(chooserSaveAs.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
{
String strNewFilename=chooserSaveAs.getSelectedFile().getName();
BufferedOutputStream out;
try
{
out=new BufferedOutputStream(new FileOutputStream(strNewFilename));
kit.write(out,
contents,
contents.getStartPosition().getOffset(),
contents.getLength());
out.close();
}
catch(IOException | BadLocationException ex)
{
Logger.getLogger(CFrameMain.class.getName()).log(Level.SEVERE,
null,
ex);
}
}
}
一旦执行,此代码不会生成任何异常,但我无法在任何地方找到保存的文件(我使用Total Commander搜索本地磁盘)。为什么没有生成文件?我目前正在使用Windows 7 Ultimate,我试图保存到已登录用户的桌面(因为可能存在访问冲突问题......)?
答案 0 :(得分:5)
获取文件而不是名称,应将其保存到正确的位置。
您还可以注销文件的绝对路径以查看它的位置。
File file =chooserSaveAs.getSelectedFile();
System.out.println(file.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(file);
答案 1 :(得分:0)
不,但我已设法修复它。我使用@ Tom的方法,它的工作原理!这是代码块:
try
{
out=new BufferedOutputStream(new FileOutputStream(file));
kit.write(out,
contents,
contents.getStartPosition().getOffset(),
contents.getLength());
out.close();
}
catch(IOException | BadLocationException ex)
{
bError=true;
Logger.getLogger(CFrameMain.class.getName()).log(Level.SEVERE,
null,
ex);
}
finally
{
if(bError!=true)
{
currentDocument.setFilename(chooserSaveAs.getSelectedFile().getAbsolutePath());
this.toolBarFileSwitcher().listOpenedFiles().model().set(this.toolBarFileSwitcher().listOpenedFiles().getSelectedIndex(),
currentDocument.filename());
this.toolBarFileSwitcher().updateUI();
}
}