【问题标题】:Method to dynamically load saved data of an array of any type in Java/Processing在 Java/Processing 中动态加载任何类型数组的保存数据的方法
【发布时间】:2018-04-07 10:18:28
【问题描述】:

有没有办法在 Java 中编写一个方法,可以加载由我的“saveClassData”-Method”创建的文件并返回保存对象所属类型的数组?

我已经尝试过不同的想法,但都没有奏效。 一个问题是,我想返回一个特定对象类型的数组,而不是“对象”类型的数组。

所以我实际上正在寻找可以使用的方法:

    ObjectType[] array = loadClassData("classname", "fileLocation.csv");

这是我编写的将对象数据保存在 csv 文档中的代码:

    void saveClassData(String fileLocation, Object[]objects) {
      try {
        String[] data = new String[objects.length];
        Class cls = objects[0].getClass();
        Field[] fieldlist = cls.getDeclaredFields();
        for (int i = 0; i < objects.length; i++) {
          data[i] = "";
          for (int t = 0; t < fieldlist.length-1; t++) {
            Field fld = fieldlist[t];
            data[i] += fld.get(objects[i]) + ",";
          }
          data[i] = data[i].substring(0, data[i].length()-1);
        }
        saveStrings(fileLocation, data);
      }
      catch (Throwable e) {
        System.err.println(e);
      }
    }

【问题讨论】:

    标签: java file object load processing


    【解决方案1】:

    听起来您正在寻找序列化。序列化允许您将对象写入文件,然后从该文件中读取它们。

    这是一个小例子:

    // write data
    FileOutputStream fos = new FileOutputStream("YourFile.whatever");
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(yourArray);
    
    // read data
    FileInputStream fis = new FileInputStream("YourFile.whatever");
    ObjectInputStream iis = new ObjectInputStream(fis);
    YourObject[] yourArray = (YourObject[]) iis.readObject();
    

    请注意,这些文件并不是供人类阅读或编辑的,而且只有在数据中的每个对象都是可序列化的情况下才有效。

    谷歌“java 序列化”可以获得大量结果。

    如果序列化对您不起作用,那么您可能会陷入手动编写和读取数据的困境。请注意,您可以轻松地将类写入文件并根据保存的数据创建该类的新实例。

    【讨论】:

    • 非常感谢您的有用回答!我知道这来晚了,因为我有一段时间没有使用 StackOverflow,但我非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2012-07-24
    • 2018-08-10
    • 1970-01-01
    • 2011-09-07
    相关资源
    最近更新 更多