我目前死于水中有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());
置于方法之外以使其全局化;出现错误。
我错过了什么吗?非常感谢帮助。如果出现任何问题或需要澄清,请直接询问!
答案 0 :(得分:3)
您必须在方法之外创建编写器。
仅仅定义外部文件是不够的。
如果在每个方法中为同一文件重新创建一个编写器,它当然会覆盖。
File
实例只是指向文件的指针。
作者是你需要重用的“实际句柄”。
请注意,如果你完成了写作,你必须关闭作家。
答案 1 :(得分:1)
我建议您使用静态方法废弃该类,而是创建一个普通的&#34;文件写入处理程序&#34; class有一个构造函数,你可以在其中传递File和writer来初始化文件编写类,并让该类处理所有写入文件,以便你可以调用这样的方法:
FileWriteHandler.writer("<FREQ:" + freqz.length() + ">" + freqz);
并且对于您想要打印的其余部分更加柔和。最后致电
FileWriteHandler.close();
会更清晰,甚至可以为该类创建一个接口,以便您可以用f.ex替换FileWriterHandler。一个DatabaseWriteHandler或类似的东西。