2016-04-15 4 views
0

私は現在、Javaプログラミングの問題で水中で死んでいます。私はmain()メソッドを含んでいないクラスの複数のメソッドからファイルにテキストを書き込もうとしていますが、このタイプの質問の他の回答とは異なります。Java:main()メソッドを持たないクラス内の複数のメソッドからファイルにテキストを書き込む

私のプログラムが現在行っていることの概要: 私のプログラムには、ディスクに保存されているテキストファイルを読み取る1つのクラス(明らかにmain()メソッドあり)があり、渡されたテキストをテキストファイルに書き込むだけで、別のクラス(プロジェクトの2番目のファイル)のメソッドを呼び出すことができます。 main()メソッドを持たないクラスの各メソッドは、渡された文字列をSAMEファイルに書き込む必要があります。

なぜ私は問題がありますか?私はとFileWriterを使わずにクラスのONEメソッドからファイルに簡単にテキストを書き込むことができますが、他のすべてのメソッドを同じファイルに書き込むには、FileWriterをグローバルにする必要があります。私はそれをグローバルにしようとしましたが、別のメソッドがテキストを保存した後にテキストを保存すると、書き込まれた最新のテキストにファイルが書き換えられます。 main()方法なし

私の現在のクラスは:

package ADIFTOCSV; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

public class createADIF { 

    static File file; 
    static FileWriter fw; 
    static BufferedWriter writer; 

    static void init() throws IOException { 
     file = new File("/Users/Colin/Desktop/Myadif.txt"); 
     fw = new FileWriter(file.getAbsoluteFile()); 
     writer = new BufferedWriter(fw); 
    } 



    static void storeDate(String datez) throws IOException { 

     writer.write("<QSO_DATE:" + datez.length() + ">" + datez); <<----NULL POINTER EXCEPTION 
    } 

    static void storeFreq(String freqz) throws IOException { 

     writer.write("<FREQ:" + freqz.length() + ">" + freqz); 
     writer.close(); 
    } 

    static void storeMode(String modez) { 

    } 

    static void storeBand(String bandz) { 

    } 

    static void storePower(String pwrz) { 

    } 

    static void storeTime(String timez) { 

    } 

    static void storeCall(String callz) { 

    } 

    static void storeRstSent(String rstsentz) { 

    } 

    static void storeRstRcvd(String rstrcvdz) { 

    } 

    static void storeComments(String commentsz) { 

    } 
} 

これらの方法の各々は、同じファイルに渡されたStringを書き込む必要があります。

storeDate()が呼び出される最初のメソッドであるため、ファイルに最初にテキストを書き込みます。ただし、storeFreq()が呼び出されると、storeDate()によって書き込まれたテキストが完全にテキストに置き換えられます。テキストを書き込むためには、各メソッドで新しいFileWriterオブジェクトを作成しなければならないので、これは明らかです。私はそれをグローバルにするメソッドの外にFileWriter fw = new FileWriter(file.getAbsoluteFile());を置くことはできません。エラーが発生する。

何か不足していますか?ヘルプは非常に感謝しています。何か疑問が生じた場合、または説明が必要な場合は、尋ねてください。

+0

あなたの問題はあなたの心の中でのみ作成されます。プログラムを実行して、エラーが発生した場合は報告してください。 –

+0

PrintWriterを実際に作成して使用する方法をコードで記述してください – Vampire

+0

実際に試したコードを提示するのはどうですか? –

答えて

3

メソッド外にライターを作成する必要があります。 ファイルを外部に定義するだけでは不十分です。 各メソッドで同じファイルにライターを再作成すると、もちろん上書きされます。 Fileインスタンスは、ファイルへのポインタに過ぎません。 ライターは、再利用する必要がある「実際のハンドル」です。

また、書き終わったら作家を閉じる必要があることに注意してください。

1

静的メソッドを使ってクラスをスクラップして、通常の "File Write Handler"クラスを作成することをお勧めします。このクラスには、ファイルとライターを渡してファイル書き込みクラスを初期化し、ファイルへのすべての書き込みは、次のようなメソッドを呼び出すことができます。

などの残りの部分を印刷します。そして最後に

FileWriteHandler.close(); 

がはるかにきれいだろう呼び出すと、あなたも、あなたがf.ex.でFileWriterHandlerを置き換えることができるように、そのクラスのインターフェイスを作ることができますDatabaseWriteHandlerなどがあります。

関連する問題