这是我第一次尝试为Object类创建记录器。我打算让记录器写入文本文件。目前,只有最后一行Log.println
行可以从文本文件中读取。
如何让记录器编写Object类中的所有打印行。
对象类:
import java.io.Serializable;
public class Battle implements Serializable{
public static void main(String[] args) {
Log.println("******Round******\n");
Log.println("New Turn\n");
}
}
记录器:
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
public class Log {
private static FileWriter log = null;
private static boolean fileOut = true;
public static void println(String output) {
print(output+"\n");
}
public static void print(String output) {
if (fileOut) {
File file = new File("file.txt");
try {
ObjectOutputStream objectOut = new ObjectOutputStream(new FileOutputStream(file));
System.out.println(output);
objectOut.writeObject(output);
objectOut.flush();
objectOut.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.print(output);
}
}
public static void setConsoleOut() {
fileOut = false;
}
}
当前文本文件输出:
’
New Turn
预期的文本文件输出:
******Round******
New Turn
答案 0 :(得分:1)
您在每次通话时都会覆盖该文件,这就是您只能看到最后一个条目的原因。
您可以使用FileWriter而不是ObjectOutputStream,因为前者允许您附加写入的数据。
或者,您可以简单地将标准输出流重定向到文件并使用System.out.println(" xxx");
How Can I Pipe the Java Console Output to File Without Java Web Start?
答案 1 :(得分:1)
改为使用作家:
gcc -o demo demo.c bit.c
然后简单地将你的对象toString()写入它:
PrintWriter objectOut = new PrintWriter(new BufferedWriter(new FileWriter(file)));
答案 2 :(得分:0)
public static void print(String output) {
方法中发生的事情是每次调用方法时都会截断基础日志文件内容。
这是由于使用了new FileOutputStream(file)
构造函数变体。
这可以通过使用public FileOutputStream(String name, boolean append)
来解决
相反,第二个参数boolean append
将确保将字节写入文件的末尾而不是开头。