2017-03-28 4 views
-2

Hallo Ich habe Probleme beim Speichern derzeit geöffneter Dateien mit JFileChooser. Ich verstehe, wie man eine neue Datei mit showSaveDialog speichert, aber ich möchte eine Datei in JFileChooser öffnen, bearbeiten und speichern sie in der vorhandenen Datei, die ich geöffnet habe, anstatt ein Speichern als Menü zu öffnen.Speichern einer aktuellen geöffneten Datei mit JFileChooser

Antwort

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

ich sagen, war, wie ich ein Gui haben, die geöffnet hat, speichern als und speichern, aber ich möchte eine Aktion für die Menütaste, um hinzufügen speichern, welche nur lassen Sie die Textdatei speichern würde, die Sie gerade ohne Öffnung bearbeitet up den showSaveDialog. –

+0

Um es zu speichern, rufen Sie den vorhandenen Dateipfad und die neuen Textdaten ab, und schreiben Sie den Text in die Datei. – Kerwin

+0

Kannst du mir ein Beispiel geben? Ich habe es versucht, aber es geht weiter zur Ausnahme. das ist, was mein Versuch ist 'Versuch { BufferedWriter fileWriter = neuer BufferedWriter (neuer FileWriter (fileChooser.getSelectedFile(). getPath())); Zeichenfolge textArea = frame.getTextArea(). GetText(); fileWriter.write (TextArea); fileWriter.close(); } catch (Ausnahme ex) { System.out.println ("Kann Datei nicht speichern"); } ' –

Verwandte Themen