KernelPanic
KernelPanic

Reputation: 2432

Saving JTextPane's contents into ordinary text file fails

I have following chunk of code:

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);
        }
    }
}

Once executed, this codes DOES NOT generate any exceptions, but I cannot find saved file on disk anywhere (I've searched through local disk with Total Commander). Why there is no file generated? I am currently working on Windows 7 Ultimate and I tried to save in to logged user's desktop (because of possible access violations problems ...)?

Upvotes: 0

Views: 1302

Answers (2)

KernelPanic
KernelPanic

Reputation: 2432

No, but I've managed to fix it. I used @Tom's approach and it works! Here is the code chunk:

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

Upvotes: 0

Tom
Tom

Reputation: 44881

Get the File not the name and it should be saved to the right place.

Also you can log out the File's absolute path to see where it is.

    File file =chooserSaveAs.getSelectedFile();
    System.out.println(file.getAbsolutePath());
    FileOutputStream fos = new FileOutputStream(file);

Upvotes: 5

Related Questions