Сохранить текст из jTextArea (то есть, Сохранить как) в новый файл .txt - PullRequest
2 голосов
/ 13 марта 2012

Я занят, пытаясь сделать текстовый процессор одним из моих проектов, и мне нужно, чтобы текст, введенный в jTextArea, был сохранен как файл .txt с именем и местоположением, которые выбрал пользователь. примечание "fc" - это имя i-го средства выбора файлов, которое я уже объявил.

   public class TextEditor extends javax.swing.JFrame {

    int count = 2;
    JTextArea n = new JTextArea();
    final JFileChooser fc = new JFileChooser();

    public void SaveAs() {

        final JFileChooser SaveAs = new JFileChooser();
        SaveAs.setApproveButtonText("Save");
        int actionDialog = SaveAs.showOpenDialog(this);

        File fileName = new File(SaveAs.getSelectedFile() + ".txt");
        try {
            if (fileName == null) {
                return;
            }
            BufferedWriter outFile = new BufferedWriter(new FileWriter(fileName));
            outFile.write(n.getText()); //put in textfile

            outFile.close();
        } catch (IOException ex) {
        }

    }

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Я бы использовал собственный метод записи JTetArea, так как это позволит легко писать в файл и хорошо обрабатывать все переводы строк.Например (и заимствовать ваш код):

public class TextEditor extends JFrame {

   int count = 2;
   JTextArea n = new JTextArea();
   final JFileChooser fc = new JFileChooser();

   public void SaveAs() {

      final JFileChooser SaveAs = new JFileChooser();
      SaveAs.setApproveButtonText("Save");
      int actionDialog = SaveAs.showOpenDialog(this);
      if (actionDialog != JFileChooser.APPROVE_OPTION) {
         return;
      }

      File fileName = new File(SaveAs.getSelectedFile() + ".txt");
      BufferedWriter outFile = null;
      try {
         outFile = new BufferedWriter(new FileWriter(fileName));

         n.write(outFile);   // *** here: ***

      } catch (IOException ex) {
         ex.printStackTrace();
      } finally {
         if (outFile != null) {
            try {
               outFile.close();
            } catch (IOException e) {
               // one of the few times that I think that it's OK
               // to leave this blank
            }
         }
      }
   }

}

В вашем коде есть ошибки.Например, это работает,

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.*;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

@SuppressWarnings("serial")
public class TextEditor extends JFrame {

   int count = 2;
   JTextArea textArea = new JTextArea(10, 30);
   final JFileChooser fc = new JFileChooser();

   public TextEditor() {
      add(new JScrollPane(textArea));
      add(new JPanel(){{add(new JButton(new AbstractAction("Save As") {

         @Override
         public void actionPerformed(ActionEvent arg0) {
            saveAs();
         }
      }));}}, BorderLayout.SOUTH);
   }

   public void saveAs() {
      FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("Text File", "txt");
      final JFileChooser saveAsFileChooser = new JFileChooser();
      saveAsFileChooser.setApproveButtonText("Save");
      saveAsFileChooser.setFileFilter(extensionFilter);
      int actionDialog = saveAsFileChooser.showOpenDialog(this);
      if (actionDialog != JFileChooser.APPROVE_OPTION) {
         return;
      }

      // !! File fileName = new File(SaveAs.getSelectedFile() + ".txt");
      File file = saveAsFileChooser.getSelectedFile();
      if (!file.getName().endsWith(".txt")) {
         file = new File(file.getAbsolutePath() + ".txt");
      }

      BufferedWriter outFile = null;
      try {
         outFile = new BufferedWriter(new FileWriter(file));

         textArea.write(outFile);

      } catch (IOException ex) {
         ex.printStackTrace();
      } finally {
         if (outFile != null) {
            try {
               outFile.close();
            } catch (IOException e) {}
         }
      }
   }

   private static void createAndShowGui() {
      TextEditor frame = new TextEditor();

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }

}
2 голосов
/ 13 марта 2012

Вы, кажется (хотя часть вашего кода отсутствует) читаете из выбранного файла, используя FileReader, а затем записываете в тот же файл, используя FileWriter.Очевидно, что это происходит по кругу.

Вам нужно вызвать JTextArea методов (getText() и т. Д.), Чтобы получить текст, а затем записать это в файл.

Что такое this.n?

Также обратите внимание, что вы ловите исключения в автоматическом режиме с помощью catch (IOException ex) {}, то есть не регистрируете какую-либо ошибку - поэтому вы не получите никакой информации, если что-то пойдет не так.

Наконец, выследует использовать finally, чтобы закрыть файл - если вы сделаете это в блоке try, он не закроется, если есть исключение.

Обновление (теперь, когда Q имеетбыло отредактировано): предположительно, ваш JFileChooser возвращает каталог.Затем вы добавляете ".txt" к нему.Я не думаю, что это то, что вы имели в виду.Попробуйте распечатать fileName перед записью в него.Пожалуйста, распечатайте n.getText(), прежде чем писать, и скажите нам, что вы видите.Пожалуйста, также поместите println в блоке catch, чтобы вы могли проверить, было ли выброшено исключение.

1 голос
/ 22 мая 2013

вам просто нужно закрыть файл в конце, чтобы он записывал текст.

пример:

BufferedWriter wr;
            try { wr = new BufferedWriter(new FileWriter(path));
                wr.write(edytor.getText());
                wr.close();
            } catch (IOException ex) {
                Logger.getLogger(Okno.class.getName()).log(Level.SEVERE, null, ex);
            }
...