将日志写入对象java

时间:2015-11-11 09:24:56

标签: java file object logging

这是我第一次尝试为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

3 个答案:

答案 0 :(得分:1)

您在每次通话时都会覆盖该文件,这就是您只能看到最后一个条目的原因。

您可以使用FileWriter而不是ObjectOutputStream,因为前者允许您附加写入的数据。

http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.lang.String,%20boolean)

或者,您可以简单地将标准输出流重定向到文件并使用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将确保将字节写入文件的末尾而不是开头。