2017-03-28 15 views
-2

こんにちは、現在開いているファイルをJFileChooserで保存するのに問題があります。私はshowSaveDialogを使って新しいファイルを保存する方法を理解していますが、JFileChooserでファイルを開き、それを編集し、保存したメニューを開くのではなく開いた既存のファイルに保存します。JFileChooserを使用して現在開いているファイルを保存する

答えて

0
public class EditorFrame extends JFrame { 

    /** 
    * @field serialVersionUID 
    */ 
    private static final long serialVersionUID = 1L; 

    private JTextArea textArea; 

    private JFileChooser jfc = new JFileChooser(System.getProperty("user.dir")); 

    public static void main(String[] args) { 
     EditorFrame frame = new EditorFrame(); 
     frame.init();  
    } 

    private void init(){ 
     this.setSize(640, 480); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.setTitle("Editor"); 
     this.setContentPane(createContentPanel()); 
     this.setVisible(true); 
    } 
    /** 
    * @return 
    * @return Container 
    */ 
    private Container createContentPanel() { 
     JPanel jPanel = new JPanel(new BorderLayout()); 
     textArea = new JTextArea(); 
     jPanel.add(textArea,BorderLayout.CENTER); 
     jPanel.add(createButton(),BorderLayout.NORTH); 
     return jPanel; 
    } 

    /** 
    * @return 
    * @return Component 
    */ 
    private Component createButton() { 
     JPanel jPanel = new JPanel(new GridLayout(1, 2)); 
     JButton openButton = new JButton("Open"); 
     JButton saveButton = new JButton("Save"); 
     jPanel.add(openButton); 
     jPanel.add(saveButton); 
     openButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       int state = jfc.showOpenDialog(null); 
       if (state == 0) { 
        File f = jfc.getSelectedFile(); 
        try { 
         String textString = readText(new FileInputStream(f), "utf-8"); 
         textArea.setText(textString); 
        } catch (FileNotFoundException e1) { 
         e1.printStackTrace(); 
        }     
       }   
      } 
     }); 
     saveButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       writeText(textArea.getText(),jfc.getSelectedFile().getAbsolutePath()); 
      } 
     }); 
     return jPanel; 
    } 
    private String readText(final InputStream in, String charset) { 
     if (charset == null) { 
      charset = Charset.defaultCharset().toString(); 
     } 
     StringBuffer text = new StringBuffer(); 
     try { 
      BufferedReader br = new BufferedReader(new InputStreamReader(in, charset)); 
      String line = null; 
      while ((line = br.readLine()) != null) { 
       text.append(line + "\n"); 
      } 
      br.close(); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
     return text.toString(); 
    } 
    private void writeText(final String text, final String descPath) { 
     File root = new File(descPath.substring(0, descPath.lastIndexOf('\\'))); 
     if (!root.exists()) { 
      root.mkdirs(); 
     } 
     try { 
      // BufferedWriter bw = new BufferedWriter(new 
      // FileWriter(descPath)); 
      BufferedWriter bw = 
       new BufferedWriter(new OutputStreamWriter(new FileOutputStream(descPath), Charset.forName("UTF-8"))); 
      bw.write(text); 
      bw.close(); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 
+0

私はGuiを開いて保存して保存しているようですが、メニューボタンの保存にアクションを追加したいだけで、開いていなくても編集したばかりのテキストファイルを保存できますshowSaveDialogを起動します。 –

+0

保存するには、存在するファイルパスと新しいテキストデータを取得し、テキストをファイルに書き込みます。 – Kerwin

+0

私に例を挙げてもらえますか?私はそれをやろうとしましたが、それは例外を残しています。これは私の試みが試みるものです。{ BufferedWriter fileWriter = new BufferedWriter(新しいFileWriter(fileChooser.getSelectedFile()。getPath())); 文字列textArea = frame.getTextArea()。getText(); fileWriter.write(textArea); fileWriter.close(); } catch(例外ex) { System.out.println( "ファイルを保存できません"); } ' –

関連する問題