2012-03-13 1 views
2

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

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

вам нужно, чтобы показать нам, что у вас есть и что вы пробовали. Мы не здесь, чтобы написать код для вас, мы здесь, чтобы помочь отладить что-то, над чем вы работали. – twain249

+0

Ваш метод 'SaveAs' и ваш JFileChooser' SaveAs' используют одно и то же имя и не следуют нормальным соглашениям об именах Java, что является рецептом для путаницы ... – DNA

+0

Что такое проблема (aka: your question)? – kleopatra

ответ

3

Я бы использовал собственный метод записи 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(); 
     } 
     }); 
    } 

} 
+0

все еще не пишет текст в новый файл, сохраненный файл не сохраняет текст – user1267300

+0

все еще не работает! – user1267300

+0

@ user1267300: «не работает» не говорит нам много, что позволит нам рассказать вам, почему. Если вам все еще нужна наша помощь, я предлагаю вам создать [sscce] (http: // sscce.org) (пожалуйста, прочитайте ссылку), и покажите нам, как он не работает. –

2

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

Для получения текста вам необходимо позвонить JTextArea методам (getText() и т. Д.), А затем записать их в файл.

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

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

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

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

+0

, так что теперь у меня есть это outFile.write (n.getText()); ('n' является jTextArea), но все же не записывает текст в файл, что мне не хватает? – user1267300

+0

Не знаю, так как я не вижу, как вы объявляете и настраиваете 'n'. Попробуйте обновить свой вопрос с помощью небольшого количества кода. Также вы можете распечатать 'n.getText()', чтобы подтвердить, что ожидаемый текст на самом деле там. – DNA

+0

Теперь вы можете увидеть достаточно кода? – user1267300

1

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

пример:

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); 
      }