gpt4 book ai didi

java - 如何将类中的所有信息存储到单个文本文件中?

转载 作者:行者123 更新时间:2023-12-01 13:09:16 24 4
gpt4 key购买 nike

我有这个用户类,可以输入信息。然而,一旦主方法关闭,信息就会丢失。我想知道如何将所有信息存储到结构如下的文本文件中。

用户名

收件箱中的邮件数量

消息1发件人

消息1接收者

消息1主题

消息1正文

消息2发送者

消息2接收者

消息2主题

消息2正文...

消息类

public class Message {      
// the properties of a message
private String sender;
private String receiver;
private String subject;
private String body;

// all property values are known at creation of the message; so initialize
public Message (String s, String r, String sub, String b)
{
sender = s;
receiver = r;
subject = sub;
body = b;
}

// any nice format of printing the names and the values of the properties will do
public void printMsg()
{
System.out.println("Sender: " + sender);
System.out.println("Receiver: " + receiver);
System.out.println("Subject: " + subject);
System.out.println("Message: " + body);
}

// what follows are basic getter methods

public String getSender()
{
return sender;
}

public String getReceiver()
{
return receiver;
}

public String getSubject()
{
return subject;
}

public String getBody()
{
return body;
}

}

用户类别

import java.util.ArrayList;

public class Userlist
{

private ArrayList<User> users;
private int numUsers;

public Userlist()
{
users = new ArrayList<User>();
}

public User findUser(String username)
{
for (User i : users)
{
if (i.userName.equals(username))
return i;
}
return null;
}

public void addUser(User u)
{
if (findUser(u.userName) != null)
System.out.println("User already exists");
else
{
users.add(u);
numUsers++;
}
}

public int getNumUsers()
{
return this.numUsers;
}

public User getUser(int i)
{
if (i>=users.length)
return null;
else
return users.get(i-1);
}
}

最佳答案

技术 1:人类可读格式

如果您需要以人类可读的格式存储它,您有以下选择:

1)将其存储为JSON(您可以查看GSON库,它的使用相当简单)

2) 存储为 XML

3)您需要编写逻辑将对象转换为字符串表示形式(这可能需要大量工作)

技术 2:二进制文件

将对象的内容/状态存储到文件的过程称为序列化。您可以看以下教程: Java - Serialization

在主方法退出之前,您可以通过序列化用户对象将对象序列化到某个文件。另外,当您序列化用户 A 的对象时,您可以序列化该用户的所有消息。

首先,您需要声明所有要序列化为可序列化的类:

public class UserList implements Serializable
{
}

public class Message implements Serializable
{
}

然后对于序列化/反序列化,您可以使用以下代码:

FileOutputStream  fos = new FileOutputStream(filename);
ObjectOutputStream out = new ObjectOutputStream(fos);

UserList userList ; // assume this is the object to be serialized
out.writeObject(userList); // serializes the object

从文件中获取对象(反序列化):

FileInputStream  fis = new FileInputStream(filename);
ObjectInputStream in = new ObjectInputStream(fis);
userList = (UserList) in.readObject();

关于java - 如何将类中的所有信息存储到单个文本文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23022031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com