如何处理无法使用DB的Java控制台应用程序中的存储?

如何处理无法使用DB的Java控制台应用程序中的存储?,java,Java,我被分配了一个任务,我们不允许使用数据库或库,而只能使用文本文件来存储数据 但它有相当复杂的要求,例如许多验证,因此,我们需要多次“访问数据库”(即读取文本文件) 我的问题是:我是否应该创建这样的类: class SomeRepository{ static ArrayList<Users> users = new ArrayList(); public SomeRepository(){ //instantiate this class on progr

我被分配了一个任务,我们不允许使用数据库或库,而只能使用文本文件来存储数据

但它有相当复杂的要求,例如许多验证,因此,我们需要多次“访问数据库”(即读取文本文件)

我的问题是:我是否应该创建这样的类:

class SomeRepository{
   static ArrayList<Users> users = new ArrayList();

   public SomeRepository(){
       //instantiate this class on program load
       //In constructor, we read the text file, instantiate and store everything inside the arraylist.
   }

   //public getOneUser(){ // for get methods, we don't read from text file at all }

   /public save() { //text file saving code overhere }
}
class-SomeRepository{
静态ArrayList用户=新建ArrayList();
公共存储库(){
//在程序加载时实例化这个类
//在构造函数中,我们读取文本文件,实例化并存储arraylist中的所有内容。
}
//public getOneUser(){//对于get方法,我们根本不从文本文件读取}
/public save(){//text file saving code overhere}
}
这是解决上述问题的好办法吗?目前,我们正在做的是每次检索数据或写入新内容时,都要对文本文件进行读写操作


就堆空间内存而言,这不是太昂贵了吗?或者我应该为每个方法读取/写入文本文件?

我建议在程序开始时将文件内容读取到动态列表中,例如arraylist。对arraylist进行必要的查询/更改,然后在程序设置为关闭时将该arraylist写入文件。这将在重复读取/写入文件时节省大量时间

不过,这并非没有缺点。您不希望在文件非常大的情况下占用内存,但考虑到这是一项任务,情况可能并非如此。此外,如果程序在最后写入之前终止,则当前执行期间对数据库所做的所有更改都将丢失。

public class IOManager{
公共静态无效writeObjToTxtFile(字符串文件名,对象){
File File=new File(fileName+“.txt”);//文件将在程序运行的根目录中创建。
try(FileOutputStream fos=新的FileOutputStream(文件);
ObjectOutputStream oos=新的ObjectOutputStream(fos);){
oos.writeObject(对象);
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共静态对象readobjfromtfile(字符串文件名){
objectobj=null;
文件=新文件(文件名+“.txt”);
FileInputStream fis=null;
试一试{
fis=新文件输入流(文件);
ObjectInputStream ois=新ObjectInputStream(fis);
obj=ois.readObject();
}捕获(ClassNotFoundException | IOException e){
e、 printStackTrace();
}
返回obj;
}
}
将此类添加到项目中。因为它对所有对象都是通用的,所以您也可以传递和接收这样的对象:
ArrayList
。随便玩一玩,根据你的具体目的进行修补。提示:您可以编写调用这些方法的其他自定义方法。例如:

公共静态void writeUsersToFile(ArrayList usersArrayList){
writeObjToTxtFile(“用户”,usersArrayList);
}
请确保您的对象实现可序列化。例如:

公共类用户实现可序列化{
}

您可以通过使用文件存储数据并从文件中读回数据来解决此问题,请尝试此链接了解有关使用文件的更多信息:但这意味着每次读取文件时,我都必须将文本反序列化为Java对象,对吗?即使我只是试图找到一个对象,我也应该只存储在文本文件中并从文本文件中检索?您只需要在每次启动应用程序时读取该文件。“但只有文本文件用于数据存储。”。允许使用序列化吗?是的,必须反序列化到java对象,我想当我们想写回文本文件时,必须序列化