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でローカルディスクを検索しました)。ファイルが生成されないのはなぜですか?私は現在Windows7Ultimateで作業していて、ログに記録されたユーザーのデスクトップに保存しようとしました(アクセス違反の問題が発生する可能性があるため...)?

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 に答える