Java:使用main()方法从类中的多个方法向文件写入文本

时间:2016-04-15 23:35:35

标签: java printwriter

我目前死于水中有Java编程问题,起初看起来有些简单!我试图在不包含main()方法的类中使用MULTIPLE方法将文本写入文件,这与此类问题的其他答案不同。

所以...快速概述我的程序目前在做什么: 我的程序有一个类(显然是main()方法),它读取存储在磁盘上的文本文件,并将文本的各个部分传递给另一个类中的某些方法(项目中的第二个文件),以简单地写入传递文本到文本文件。没有main()方法的类中的每个方法都需要将传递给它们的字符串写入THE SAME文件。

为什么我遇到麻烦?我可以轻松地从类中的ONE方法将文本写入文件而不使用main() FileWriter,但是为了让我所有其他方法都写入同一个文件,我需要制作全球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写入SAME文件。

storeDate()是第一个被调用的方法,因此它首先将文本写入文件。但是,当storeFreq()被调用时,它的文本将完全替换storeDate()所写的文本。这是显而易见的,因为我被迫在每个方法中创建一个新的FileWriter对象以便编写文本。我不能将FileWriter fw = new FileWriter(file.getAbsoluteFile());置于方法之外以使其全局化;出现错误。

我错过了什么吗?非常感谢帮助。如果出现任何问题或需要澄清,请直接询问!

2 个答案:

答案 0 :(得分:3)

您必须在方法之外创建编写器。 仅仅定义外部文件是不够的。 如果在每个方法中为同一文件重新创建一个编写器,它当然会覆盖。 File实例只是指向文件的指针。 作者是你需要重用的“实际句柄”。

请注意,如果你完成了写作,你必须关闭作家。

答案 1 :(得分:1)

我建议您使用静态方法废弃该类,而是创建一个普通的&#34;文件写入处理程序&#34; class有一个构造函数,你可以在其中传递File和writer来初始化文件编写类,并让该类处理所有写入文件,以便你可以调用这样的方法:

FileWriteHandler.writer("<FREQ:" + freqz.length() + ">" + freqz);

并且对于您想要打印的其余部分更加柔和。最后致电

FileWriteHandler.close();

会更清晰,甚至可以为该类创建一个接口,以便您可以用f.ex替换FileWriterHandler。一个DatabaseWriteHandler或类似的东西。