2017-03-28 3 views
-2

Bonjour, j'ai des problèmes pour enregistrer les fichiers actuellement ouverts avec JFileChooser. Je comprends comment enregistrer un nouveau fichier en utilisant showSaveDialog mais je veux ouvrir un fichier dans JFileChooser, le modifier et l'enregistrer dans le fichier existant que j'ai ouvert au lieu d'ouvrir un fichier en tant que menu.Enregistrement d'un fichier ouvert en cours à l'aide de JFileChooser

Répondre

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

je disais que j'ai une interface utilisateur graphique qui a ouvert, économiser et sauver, mais je veux ajouter une action pour le bouton de menu de sauvegarde qui serait tout simplement vous permettre de sauvegarder le fichier texte que vous venez de modifier sans ouvrir le showSaveDialog. –

+0

Pour l'enregistrer, récupérez le chemin du fichier existant et les nouvelles données de texte, puis écrivez le texte dans le fichier. – Kerwin

+0

une chance que vous pouvez me donner un exemple? J'ai essayé de le faire mais ça continue à l'exception. c'est ce que ma tentative est 'try { BufferedWriter fileWriter = nouveau BufferedWriter (nouveau FileWriter (fileChooser.getSelectedFile(). getPath())); Chaîne textArea = frame.getTextArea(). GetText(); fileWriter.write (textArea); fileWriter.close(); } catch (Exception ex) { System.out.println ("Impossible d'enregistrer le fichier"); } ' –