Java:在没有main()方法的情况下,从类中的多个方法向文件写入文本

Java:在没有main()方法的情况下,从类中的多个方法向文件写入文本,java,printwriter,Java,Printwriter,我目前正陷于一个Java编程问题中,这个问题一开始似乎有点简单!我试图从一个不包含main()方法的类中的多个方法向文件写入文本,这与其他此类问题的答案不同 所以。。。快速概述我的程序当前正在执行的操作: 我的程序有一个类(显然带有main()方法),它读取存储在磁盘上的文本文件,并将文本部分传递给另一个类(项目中的第二个文件)中的某些方法,以便将传递的文本写入文本文件。类中没有main()方法的每个方法都需要将传递给它们的字符串写入同一个文件 为什么我有麻烦?我可以很容易地从类中的一个方法将文

我目前正陷于一个Java编程问题中,这个问题一开始似乎有点简单!我试图从一个不包含
main()
方法的类中的多个方法向文件写入文本,这与其他此类问题的答案不同

所以。。。快速概述我的程序当前正在执行的操作: 我的程序有一个类(显然带有
main()
方法),它读取存储在磁盘上的文本文件,并将文本部分传递给另一个类(项目中的第二个文件)中的某些方法,以便将传递的文本写入文本文件。类中没有
main()
方法的每个方法都需要将传递给它们的字符串写入同一个文件

为什么我有麻烦?我可以很容易地从类中的一个方法将文本写入文件,而无需使用
FileWriter
main()
,但为了让所有其他方法都写入同一个文件,我需要将
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) {

    }
}
package ADIFTOCSV;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileWriter;
导入java.io.IOException;
公共类createADIF{
静态文件;
静态文件写入程序;
静态缓冲写入程序;
静态void init()引发IOException{
file=新文件(“/Users/Colin/Desktop/Myadif.txt”);
fw=新的FileWriter(file.getAbsoluteFile());
写入程序=新的缓冲写入程序(fw);
}
静态void storeDate(字符串datez)引发IOException{

write(“+datez);您必须在方法之外创建writer。 仅仅在外部定义文件是不够的。 如果在每个方法中为同一个文件重新创建一个writer,它当然会覆盖。
文件
实例只是指向该文件的指针。 writer是您需要重用的“实际句柄”


请注意,如果完成了编写,则必须关闭编写器。

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


请注意,如果您完成了编写,您必须关闭writer。

我建议您使用静态方法废弃该类,而是创建一个普通的“文件写入处理程序”类,该类具有一个构造函数,您可以在其中传递文件和编写器以初始化文件写入类,并让该类处理对文件的所有写入,以便您可以调用如下方法:

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

会更干净,您甚至可以为该类创建一个接口,这样您就可以用f.ex.DatabaseWriteHandler或类似的东西替换FileWriteHandler。

我建议您使用静态方法废弃该类,而是创建一个普通的“文件写入处理程序”类,该类具有一个构造函数,您可以在其中传递文件和编写器以初始化文件写入类,并让该类处理对文件的所有写入,以便您可以调用如下方法:

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

会更干净,你甚至可以为该类创建一个接口,这样你就可以用f.ex.DatabaseWriteHandler或类似的东西替换FileWriterHandler。

你的问题只是在你的脑海中产生的。如果你遇到任何错误,试着运行你的程序并报告。请提供你实际如何创建和使用Pri的代码NtWriter您如何展示您实际尝试过的代码。@BjörnKautler没问题!我会编辑代码。我以前在那里有PrintWriter代码,但由于它在我的项目中不起作用,我放弃了它。我将添加它,我想我的答案已经是您的解决方案了。;-)但目前它主要基于猜测您在做什么。gyour麻烦只是在你的头脑中产生的。试着运行你的程序,如果你有任何错误,请报告。请提供你如何实际创建和使用PrintWriter的代码。关于你如何展示你实际尝试过的代码。@BjörnKautler没问题!我会编辑代码。我以前在那里有PrintWriter代码,但因为它在我的p我想我的答案已经是你的解决方案了,但目前主要是基于猜测你在做什么