将JTextPane的内容保存到普通文本文件失败

时间:2013-03-27 03:21:10

标签: java swing file-io jtextpane

我有以下代码:

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

2 个答案:

答案 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();
           }
    }