为了账号安全,请及时绑定邮箱和手机立即绑定

如何将导出的 java 对象的格式更改为文件?

如何将导出的 java 对象的格式更改为文件?

慕妹3242003 2023-09-20 17:02:56
我正在尝试将 java 对象导出到 txt 文件中,但该文件中的输出格式不正确并且包含不必要的数据。如果有人能告诉我我做错了什么。这是代码的简单示例:import java.io.Serializable;public class Test implements Serializable{    private static final long serialVersionUID = 1L;    private String shortName;    private String fullName;    public Test(String shortName, String fullName) {        this.shortName=shortName;        this.fullName=fullName;    }    public String getShortName() {        return shortName;    }    public void setShortName(String shortName) {        this.shortName = shortName;    }    public String getFullName() {        return fullName;    }    public void setFullName(String fullName) {        this.fullName = fullName;    }    @Override    public String toString() {        return "Name:" + shortName +   "\nFullName: " + fullName;    }}这是该方法的一部分:FileOutputStream outputStream = new FileOutputStream(fullPath);        ObjectOutputStream o = new ObjectOutputStream(outputStream);        Test test = new Test("Short name of test","Full name of test");        o.writeObject(test);        o.close();        outputStream.close();这就是我在文件中得到的内容:¬í sr &com.testing.project.Evaluation.model.Test        L fullNamet Ljava/lang/String;L     shortNameq ~ xpt Full name of testt Short name of test我将不胜感激任何形式的帮助。
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

您正在使用 Java 序列化,它将对象写入其自己的二进制格式,而不是文本。如果您需要文本格式,我建议您使用 JSON 以及jackson-databind等库。

为了方便起见,这里是一个工作示例(既写入文本文件又从文本文件读回对象):

主类

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;


import com.fasterxml.jackson.core.JsonGenerationException;

import com.fasterxml.jackson.databind.JsonMappingException;

import com.fasterxml.jackson.databind.ObjectMapper;


public class Main {


    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, FileNotFoundException, IOException {

        ObjectMapper om = new ObjectMapper();

        Test test = new Test("Short name of test","Full name of test");

        om.writeValue(new FileOutputStream("test.json"), test);


        Test readValue = om.readValue(new FileInputStream("test.json"), Test.class);

        System.out.println(readValue.getShortName());

        System.out.println(readValue.getFullName());

    }

}

测试类


import java.io.Serializable;


public class Test implements Serializable{


    private static final long serialVersionUID = 1L;

    private String shortName;

    private String fullName;


    public Test() {


    }


    public Test(String shortName, String fullName) {

        this.shortName=shortName;

        this.fullName=fullName;

    }


    public String getShortName() {

        return shortName;

    }

    public void setShortName(String shortName) {

        this.shortName = shortName;

    }

    public String getFullName() {

        return fullName;

    }

    public void setFullName(String fullName) {

        this.fullName = fullName;

    }


    @Override

    public String toString() {

        return "Name:" + shortName +   "\nFullName: " + fullName;

    }

}

请注意,我已向 Test.class 添加了一个默认构造函数,以便 Jackson 可以在从 json 反序列化时创建它。


查看完整回答
反对 回复 2023-09-20
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

writeObject 函数将 Test 的对象图写入文件流。在JAVA中用于持久化。如果您想将字段数据存储到文件中,我建议您在类中使用 FileWriter 的专用方法。



查看完整回答
反对 回复 2023-09-20
?
四季花海

TA贡献1811条经验 获得超5个赞

ObjectOutputStream不会以可读格式写入。您可能想使用FileWriter:


    try (BufferedWriter writer = new BufferedWriter(new FileWriter("test.txt"))) {

        Test t = new Test("Short name of test", "Full name of test");

        writer.write(t.toString());

    } catch (IOException e) {

        e.printStackTrace();

    }


查看完整回答
反对 回复 2023-09-20
  • 3 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信