2011-12-31 5 views
0

メモ帳のようにFileChooser dialogを開かずにファイルを開いた場合の保存方法は? 私には分かりやすいほど時間がかかりました。私はネットを検索しましたが、何かが私をここで助けてくれるのを見つけることができませんでした。すでに開いているファイルをJFileChooser Javaに保存していますか?

ありがとうございました

私の問題は以下のコードにあります。新しい編集内容は保存されません。私はより多くを知らなくても(私は意味は更新されません)

fileWriter = new BufferedWriter(new 
FileWriter(openFile.getSelectedFile().getPath())); 

private class FileAction implements ActionListener{ 
    public void actionPerformed(ActionEvent e){ 
     //JOptionDialog 
     JFileChooser openFile = new JFileChooser(); 
     openFile.setFileFilter(new txtFilter()); 
     if(e.getSource() == open){ 

      int openOption = openFile.showOpenDialog(frame); 

        textArea.setText(""); //clearing the Text_AREA before opening the new file 

       try{ 
        Scanner scan = new Scanner(new FileReader(openFile.getSelectedFile().getPath())); 
        while(scan.hasNext()) 
         textArea.append(scan.nextLine() + "\n"); 

       }catch(Exception ex){ 
        //ShowDialogBox dialogBox = new ShowDialogBox(); 
        JOptionPane.showMessageDialog(frame,"Please choose .txt File only"); 
       } 
      } 
     } else if(e.getSource() == save){ //SAVE_BUTTON 

      try{ 
       BufferedWriter fileWriter = new BufferedWriter(new FileWriter(openFile.getSelectedFile().getPath())); //(This does not save at all I opened the file again and still as it was before editing) 
       fileWriter.write(textArea.getText()); 
       fileWriter.close(); 
      }catch(Exception ex){ 

      } 


     } 


    } 
} 
+0

どのようなエラーが表示されますか?開いたファイルにハンドルを保存してみましたが、 'new FileWriter(openedFile))'のようにファイルライターを作成しましたか? – Thomas

+0

申し訳ありませんがエラーではない、ファイルが保存されていません。私が再び開くと、保存する前に追加したテキストは表示されません。コメントを編集して、あなたに混乱を与えないようにしましょう。 –

+0

あなたは空のキャッチブロックを持っています。少なくともスタックトレースを出力して、例外がないことを確認してください。 –

答えて

1

を同じファイルを開いて、何も保存されていなかった、私はあなたがsave(それは右、ボタンのとき以来NullPointerExceptionを取得すると仮定しますか? )を押すと、選択したファイルがまだない新しいJFileChooserインスタンスが作成されます。

だから、それはインスタンス変数に開いたときに、選択したファイルを保存する(openブランチでopenFile.getSelectedFile()を使用)とsaveブランチで作成されたFileWriterにそのファイルハンドルを渡す必要があります。

FileActionの同じインスタンスを再利用している場合は、そこに参照を置くこともできます。それ以外の場合は、FileActionの複数のインスタンスにアクセスできる別の場所(アクションに渡されるコンテナオブジェクト)に配置できます。

ただ、事前に単語:それは静力学の適切な使用方法ではありません、に静的変数を使用する誘惑に抵抗します。

+0

本当にありがとうございます。私の問題は、tryとcatchブロックの中にあるので、ハンドラを渡す方法です。 –

+0

@AlexDunhamこれはtry-catchブロックとは関係ありません。ファイル・チューザーを使用してファイルをオープンした後、 'openFile.getSelectedFile()'を使ってハンドルを取得できます。保存アクションの呼び出しがそのハンドルにアクセスできるように格納します。私が言ったように、アクションの同じインスタンスを使用している場合は、単純化のためにインスタンス変数を使用できます。 – Thomas

+0

私は同じアクションを使用していますが、私の問題は愚かです。ファイルはIF-Statment(オープンブランチ)内で選択されるので、最初にインスタンス変数を作成した場合、 'openFile.getSelectedFile();は何も選択されません。私はあなたがそれを持っていると思います。私は 'selected'を' open'分岐文から取得して 'save'ブランチに渡す方法を知らない。私はこれをするためにかなりの時間をかけて努力してきたので、本当に諦めています。 –

1

問題には関係しませんが、fileWriter.write(...)は使用しないでください。

代わりにtextArea.write(...)を使用してください。詳細は、Text and New Linesを参照してください。

+0

旧大陸からの幸せな新年、btw +1 – mKorbel

関連する問題