cxpxatu521 2024-03-18 18:49 采纳率: 80%
浏览 28
已结题

Java不使用文件、数据库等方式持久化存储数据,保证程序再次启动时数据还一直存在

Java程序没有权限将数据写入文件,如何保证程序再次启动数据还一直存在

Java数据持久化问题,不使用数据库、文件这些方式,尽可能只是用本地的Java代码来做到

这个需求本来就是错的, 除了文件、数据库以外没办法让程序重新启动后数据还在

  • 写回答

21条回答 默认 最新

  • 关注

    cxpxatu521 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    如果Java程序没有权限将数据写入文件,可以考虑以下方法来实现数据的持久化和存储,同时确保在程序重启后依然可以访问到这些数据:

    1. 使用数据库: 可以使用内存数据库,如H2或HSQLDB,它们可以嵌入到应用程序中,不需要额外的数据库服务器。通过使用数据库,你可以将数据存储在内存中,而不是磁盘上的文件中。
      // 使用H2内存数据库的示例代码
      import java.sql.*;
      
      public class PersistenceExample {
          public static void main(String[] args) {
              Connection conn = null;
              try {
                  // 加载数据库驱动
                  Class.forName("org.h2.Driver");
                  // 创建数据库连接
                  conn = DriverManager.getConnection("jdbc:h2:mem:test", "user", "password");
                  // 创建表
                  Statement stmt = conn.createStatement();
                  stmt.executeUpdate("CREATE TABLE IF NOT EXISTS data (id INT PRIMARY KEY, value VARCHAR(255))");
                  // 插入数据
                  stmt.executeUpdate("INSERT INTO data VALUES (1, 'Hello World')");
                  // 查询数据
                  ResultSet rs = stmt.executeQuery("SELECT * FROM data");
                  while (rs.next()) {
                      System.out.println(rs.getInt("id") + " " + rs.getString("value"));
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  // 关闭数据库连接
                  if (conn != null) {
                      try {
                          conn.close();
                      } catch (SQLException e) {
                          e.printStackTrace();
                      }
                  }
              }
          }
      }
      
    2. 使用序列化和反序列化: 如果没有权限访问磁盘,你可以将数据序列化为字节数组,并存储在内存中。在程序重启时,再将字节数组反序列化为对象恢复数据。
      import java.io.*;
      
      public class PersistenceExample {
          public static void main(String[] args) {
              // 将对象写入内存
              ByteArrayOutputStream bos = new ByteArrayOutputStream();
              try {
                  ObjectOutputStream oos = new ObjectOutputStream(bos);
                  MyData data = new MyData();
                  data.setValue("Hello World");
                  oos.writeObject(data);
                  oos.flush();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              // 从内存中读取对象
              ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
              try {
                  ObjectInputStream ois = new ObjectInputStream(bis);
                  MyData restoredData = (MyData) ois.readObject();
                  System.out.println(restoredData.getValue());
              } catch (IOException | ClassNotFoundException e) {
                  e.printStackTrace();
              }
          }
      
          // 需要序列化和反序列化的数据类
          private static class MyData implements Serializable {
              private String value;
      
              public String getValue() {
                  return value;
              }
      
              public void setValue(String value) {
                  this.value = value;
              }
          }
      }
      
    3. 使用缓存: 如果数据量不大且可以接受一些性能损失,可以使用内存缓存来存储数据。当程序重启时,可以将缓存中的数据重新加载到内存中。
      import java.util.HashMap;
      import java.util.Map;
      
      public class PersistenceExample {
          private static Map<Integer, String> cache = new HashMap<>();
      
          public static void main(String[] args) {
              // 将数据写入缓存
              cache.put(1, "Hello World");
              // 从缓存中读取数据
              String value = cache.get(1);
              System.out.println(value);
          }
      }
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(20条)

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 修改了问题 3月20日
  • 赞助了问题酬金50元 3月18日
  • 展开全部

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真