读取/写入对象到文件,返回null

时间:2019-04-08 04:47:43

标签: java objectinputstream objectoutputstream

我正在尝试将对象读取和写入文件。将输出读取到新对象中是可行的,但是每个值都为null。

代码如下:

public void read() throws Exception
    {
        try
        {
            FileInputStream fIn = new FileInputStream(file);
            ObjectInputStream in = new ObjectInputStream(fIn);

            Object obj = in.readObject();

            System.out.println(obj);
public void save() throws Exception
    {
        FileOutputStream fOut = new FileOutputStream(file.toString());
        ObjectOutputStream out = new ObjectOutputStream(fOut);

        out.writeObject(this);
        out.flush();
        out.close();
    }

这是文件输出:(image of output)

我想在创建的新对象中接收以前写入文件的值,但是对于所有值我得到的都是空。

编辑:由于人们要求整个类,而且我也不知道什么代码可能引起什么,所以这里是整个UserFile类:https://pastebin.com/Gr1tcGsg

2 个答案:

答案 0 :(得分:0)

我已经运行了该代码,它可以正常工作,这意味着您最有可能在编写之前先进行阅读,或者遇到InvalidClassException: no valid constructor之类的异常,这对您而言很有意义。

我运行的代码:

public class SavedObject implements Serializable
{
    public static void main(String[] args) throws IOException, ClassNotFoundException
    {
        new SavedObject();
    }

    private final int random;

    private SavedObject() throws IOException, ClassNotFoundException
    {
        random = ThreadLocalRandom.current().nextInt();
        File file = new File("Object.txt");
        save(file);
        read(file);
    }

    private void save(File file) throws IOException
    {
        FileOutputStream fileOutput = new FileOutputStream(file);
        ObjectOutputStream objectOutput = new ObjectOutputStream(fileOutput);

        objectOutput.writeObject(this);
        objectOutput.close();
        fileOutput.close();

        System.out.println(this);
    }

    private void read(File file) throws IOException, ClassNotFoundException
    {
        FileInputStream fileInput = new FileInputStream(file);
        ObjectInputStream objectInput = new ObjectInputStream(fileInput);

        Object obj = objectInput.readObject();

        System.out.println(obj);

        objectInput.close();
        fileInput.close();
    }

    public String toString()
    {
        return "SavedObject(Random: " + random + ")";
    }
}

哪些印刷品:

SavedObject(Random: -2145716528)
SavedObject(Random: -2145716528)

还有一些提示给您:

  • 如果您throws
  • ,请不要尝试
  • 具有更多可读的变量名
  • 在下一个问题中发送更多代码
  • 不建议使用ObjectOutputStream,如果可以的话,应按原样编写值
  • 请勿使用throws“ Exception”,而应使用throws
  • 放入文件而不是file.toString()

答案 1 :(得分:0)

我发现了问题,原因是在我的构造函数中,我没有正确应用从文件中检索到的信息。谢谢大家的帮助。