0

我有以下代码块:

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 并尝试保存到登录用户的桌面(因为可能存在访问冲突问题......)?

4

2 回答 2

5

获取文件而不是名称,它应该保存到正确的位置。

您还可以注销文件的绝对路径以查看它的位置。

    File file =chooserSaveAs.getSelectedFile();
    System.out.println(file.getAbsolutePath());
    FileOutputStream fos = new FileOutputStream(file);
于 2013-03-27T03:23:13.257 回答
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();
           }
    }
于 2013-03-27T19:41:37.183 回答