2012-09-05 28 views
0

所以我設計了一個文本編輯器。對於Open/Save方法,我試圖使用TextArea(它不一定是一個,它只是我當前的方法)。現在,我現在有兩個問題:TextArea - 以任何方式獲取所有文本?

1)當我加載文件時,它當前不會刪除當前在文本編輯器中的內容。例如,如果我輸入「Owl」,然後加載一個包含「Rat」的文件,它將最終成爲「OwlRat」。爲了解決這個問題,我打算使用replaceRange方法(但是,它不是絕對的,任何建議都會很棒!)。但是,我必須替換文本編輯器的所有內容,而不僅僅是選定的文本,並且我無法弄清楚如何做到這一點。有小費嗎?

2)目前,當我加載文件時,除非我在運行應用程序的同時保存該文件,否則什麼都不會發生。因此,例如,運行程序,保存文件,關閉程序,再次運行程序,然後加載文件將不會產生任何結果。我知道這是因爲String x沒有結轉,但我無法想象修復它。有人建議載體,但我看不出他們會如何幫助...

下面是打開/保存方法的代碼:

公開賽:

public void Open(String name){  
    File textFile = new File(name + ".txt."); 
     BufferedReader reader = null; 
     try 
     { 
     textArea.append(x); 
     reader = new BufferedReader(new FileReader(textFile)); 
     reader.read(); 
    } 
     catch (IOException e) 
     { 
    } 
     finally 
    { 
     try 
      { 
      if (reader != null) 
       reader.close(); 
     } 
     catch (IOException e) 
     {      
     } 
    } 
} 

節省:

public void Save(String name){ 
File textFile = new File(name + ".txt"); 
BufferedWriter writer = null; 
try 
{ 
    writer = new BufferedWriter(new FileWriter(textFile)); 
    writer.write(name); 
    x = textArea.getText(); 

} 
catch (IOException e) 
{ 
} 
finally 
{ 
    try 
    { 
      if (writer != null) 
        writer.close(); 
    } 
    catch (IOException e) 
    { 
    } 
} 
} 
+2

記錄這些例外的方法。什麼是'x'? –

+0

1)請使用一致的邏輯縮進代碼塊。 2)對於每個'catch',添加'e.printStackTrace();'3)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names。 doc.html#73307)(特別是用於名稱的情況)類別,方法和屬性名稱並一致使用。 –

+0

考慮使用['JTextComponent.read(Reader,Object)'](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#read%28java.io。 Reader,%20java.lang.Object%29)&['write(Writer)'](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/JTextComponent.html#write %28java.io.Writer%29)。更強大。 –

回答

0

有很多怎麼回事...

  1. 什麼是'x'(提示:它不是來自文件的任何東西!),以及爲什麼將它附加到文本區域?
  2. BufferedReader.read()返回一個字符,這可能不是你所期望的。嘗試遍歷readline()。
  3. 按照Dave Newton的建議來處理您的異常併爲您的變量提供更好的名稱。
  4. 該文本文件將持續跨多次調用您的程序,所以缺乏數據與此無關。

祝你好運。

0

使用textArea.setText(TEXT);而不是追加;追加意味着添加到,所以當你添加文本到一個TextArea時,你添加了文本。另一方面,setText將設置文本,用新文本替換舊文本(這是你想要的)。

至於爲什麼它沒有閱讀,你沒有正確閱讀。首先,.read()只是讀取一個字符(不是你想要的)。其次,你不會對返回的結果做任何事情。去某處(如here)瞭解如何正確讀取文件,然後取回返回的字符串並執行textArea.setText(readString);

和其他人說的一樣,在你所有的catch塊中使用e.printStackTrace();來使錯誤實際顯示在控制檯中。

1

我有這個同樣的問題,我的傢伙朋友,經過多次思考和研究,我甚至找到了解決方案。

您可以使用ArrayList通過調用save來放置TextArea的所有內容並將其作爲參數發送,因爲writer只是寫了字符串行,然後我們使用「for」行逐行寫入ArrayList最後我們將在txt文件中內容TextArea。 如果沒有任何意義,我很抱歉是谷歌翻譯和我不會說英語的人。

觀看Windows記事本,它不總是跳線,並在一行中顯示全部,使用寫字板好。


私人無效SaveActionPerformed(java.awt.event.ActionEvent中EVT){

String NameFile = Name.getText(); 
    ArrayList<String> Text = new ArrayList<String>(); 

    Text.add(TextArea.getText()); 

    SaveFile(NameFile, Text); 
} 

公共無效SAVEFILE(字符串名稱,ArrayList的<字符串>消息){

path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt"; 

    File file1 = new File(path); 

    try { 

     if (!file1.exists()) { 

      file1.createNewFile(); 
     } 


     File[] files = file1.listFiles(); 


     FileWriter fw = new FileWriter(file1, true); 

     BufferedWriter bw = new BufferedWriter(fw); 

     for (int i = 0; i < message.size(); i++) { 

      bw.write(message.get(i)); 
      bw.newLine(); 
     } 

     bw.close(); 
     fw.close(); 

     FileReader fr = new FileReader(file1); 

     BufferedReader br = new BufferedReader(fr); 

     fw = new FileWriter(file1, true); 

     bw = new BufferedWriter(fw); 

     while (br.ready()) { 

      String line = br.readLine(); 

      System.out.println(line); 

      bw.write(line); 
      bw.newLine(); 

     } 
     br.close(); 
     fr.close(); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
     JOptionPane.showMessageDialog(null, "Error in" + ex);   
} 
相關問題