2012-01-04 14 views
0

JTextAreaからテキストを取得してtxtファイルに保存する方法があります。 これはすべて正常に動作しますが、\ nではなく小さな空の四角で一文字で保存されます。 私は、\でこれらの正方形を交換したいのn正方形を nに置き換えてください

私のコードは次のようになります。それはtxtファイルを作成しますが、それは常にempyあるので、何か問題があるに違いありません

public void createTxt(){ 

TxtFilter txt = new TxtFilter(); 

JFileChooser fSave = new JFileChooser(); 

fSave.setFileFilter(txt); 
int result = fSave.showSaveDialog(this); 
if(result == JFileChooser.APPROVE_OPTION){ 
    File sFile = new File(fSave.getSelectedFile()+ ".txt"); 

    String file_name = sFile.getName(); 
    String file_path = sFile.getParent(); 

    try{ 
     if(!sFile.exists()){ 

      BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); 

      FileReader fr = new FileReader(jTextArea1.getText()); 
      BufferedReader br = new BufferedReader(fr); 

      String line = ""; 

      while((line = br.readLine())!= null){ 
      line = line.replace("o", "\n"); 
      out.write(line); 
      } 
      out.close(); 

      JOptionPane.showMessageDialog(null, "Warning file • " + file_name + " • created succesfully in \n" + file_path);  
     } 

     else{ 

、テキストがJTextAreaにから取得されていないと私はいつも例外を持っています

catch(IOException e){ 
     System.out.println("Error"); 
    } 

どこがエラーですか?コードを変更するには?

PS私は空の四角形の代わりに 'o'を書いています。なぜなら、置き換えられる最初の文字列(または文字)として何を書くべきかわからないからです。

おかげ

を追加しました:のprintStackTrace

java.io.FileNotFoundException: sdfdsf (Impossibile trovare il file specificato) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(FileInputStream.java:106) 
at java.io.FileInputStream.<init>(FileInputStream.java:66) 
at java.io.FileReader.<init>(FileReader.java:41) 
at provegrafica.ProvaFramePop.createTxt(ProvaFramePop.java:154) 
at provegrafica.ProvaFramePop.jMenuSaveActionPerformed(ProvaFramePop.java:129) 
at provegrafica.ProvaFramePop.access$100(ProvaFramePop.java:17) 
at provegrafica.ProvaFramePop$2.actionPerformed(ProvaFramePop.java:64) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809) 
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850) 
at java.awt.Component.processMouseEvent(Component.java:6289) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
at java.awt.Component.processEvent(Component.java:6054) 
at java.awt.Container.processEvent(Container.java:2041) 
at java.awt.Component.dispatchEventImpl(Component.java:4652) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Component.dispatchEvent(Component.java:4482) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
at java.awt.Container.dispatchEventImpl(Container.java:2085) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4482) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) 
at java.awt.EventQueue.access$000(EventQueue.java:85) 
at java.awt.EventQueue$1.run(EventQueue.java:603) 
at java.awt.EventQueue$1.run(EventQueue.java:601) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
at java.awt.EventQueue$2.run(EventQueue.java:617) 
at java.awt.EventQueue$2.run(EventQueue.java:615) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

BUILD SUCCESSFUL(合計時間:19秒)

を追加しました:

else{ 
      String message = "File • " + file_name + " • already exist in \n" + file_path + ":\n" + "Do you want to overwrite?"; 
      String title = "Warning"; 
      int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION); 
      if(reply == JOptionPane.YES_OPTION){ 
       sFile.delete(); 

       BufferedWriter out = new BufferedWriter(new FileWriter(sFile)); 
       out.write(jTextArea1.getText()); 
       out.close(); 
       JOptionPane.showMessageDialog(null, "File • " + file_name + " • overwritten succesfully in \n" + file_path); 

      } 
     } 
+1

はe.printStackTraceを(試してみてくださいファイルに書き込むには、以下のことがなければならないよう

if(!sFile.exists()){ // don't use not here // code to write into the file } 

を言っている場合で、あなたの条件)の代わりにシステムの.out.println( "エラー")し、投稿に追加します。 –

答えて

2

ものあるコードのエルス一部\ nです。メモ帳で開いています。

各\ nの前に\ rを印刷する必要があります(printLineメソッドを持つバッファライターを使用するだけで簡単に行うことができます)。ワードパッド。

+1

-1、車輪を再改造する。 – camickr

0

車輪の再発明をしないでください

line = line.replaceAll("o", System.getProperty("line.separator")); 
+0

オクラ、怒っている男;) – Vlad

+0

あなたはあなたの投票で面白いです...たとえそれが最適な解決策ではないとしても、それは正しいものです。だから私は自分の答えに投票する理由がない。あなたの答えが良いと思ったら、他の回答を投票することによって、ユーザーが「よりよく」見えるようにするのではなく、決めることができます。 – Vlad

+1

これは初心者による質問です。あまりにも多くの初心者は、思考せずに答えをコピーしてください。回答がAPIに関する知識の不足を示している場合は、私は何らかの回答をdownvoteします。私はこの答えが他のOSよりも優れていることを認めなければなりません。あなたが少なくともOSのフォーマットでファイルを保存しようとしているからです。しかしそれはまだ不必要なコードであり、効率的ではありません。彼らがそれがより良い答えだと思えば、他のユーザーがあなたの答えをアップアップしている可能性があります。私はあなたの答えを落とした理由でアップヴォートを持っていました。 – camickr

3

line = line.replace("o", "\n"); 

を交換してください。

すべてのテキストコンポーネントは、write(...)メソッドをサポートしています。このメソッドは、テキストがファイルに書き込まれるときに適切な改行文字列を使用します。だから、あなたがすべてです:

textArea.write(...); 
0

あなたが他の部分に あなたのプログラムを何をしているのは、指定されたファイルを見つけることができません。

それは

if(sFile.exists()){ 
// code to write into the file 
} 

使用

while((line = br.readLine())!= null){ 
     out.append(line); //can also use write in place of append 
     out.append("\r\n"); 
     } 
     out.close(); 
関連する問題