我有一个我想要访问数据的领域数据库文件。我从手机上的应用程序中提取了它。不幸的是,我想以超出领域工作室能力的方式玩弄数据。
我的问题是,如何将.realm文件转换为另一种数据库格式(JSON,CSV)?我正在使用Windows 10.
答案 0 :(得分:0)
因此,经过将近12个小时的艰苦工作,我终于能够将我的.realm文件中的RealmObjects转换为JSON文件。全是Java!
此过程适用于.realm文件中的一个模型定义。
以下是我的表现:
$YOUR_OBJECT$
在您的MainActivity中,添加
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.assetFile(getFilesDir().getPath() + "/NAME_OF_REALM_FILE.realm")
.name("NAME_OF_REALM_FILE.realm")
.schemaVersion(30)
.build();
Realm.setDefaultConfiguration(config);
final Realm realm = Realm.getInstance(config);
final Gson g = new Gson();
到onCreate()
方法。
将onClick(View view)
的内容替换为
try {
File output = new File(getFilesDir(), "output.json");
BufferedWriter writer = new BufferedWriter(new FileWriter(output, true));
RealmResults results = realm.where($YOUR_OBJECT$.class).findAll();
Iterator<$YOUR_OBJECT$> iterator = results.iterator();
writer.write("{\"Output\": {");
while (iterator.hasNext()) {
$YOUR_OBJECT$ next = realm.copyFromRealm(iterator.next());
writer.write("\"" + <PUT SOMETHING HERE, LIKE AN ID> + "\": ");
writer.write(g.toJson(next));
writer.write(",");
}
writer.write("}}");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
特别注意!您的RealmObject不能有任何循环引用。任何类型的字段都是其他RealmObjects的集合。如果您的GSON对象溢出,那就是100%的原因。要删除循环引用,请在next.setREFERENCE(null);
来电之前致电g.toJson()
。
将.realm文件放在应用程序的文件目录中(data/data/com.app.name/files
)
启动应用程序并按按钮。您的output.json将在与.realm文件相同的目录中生成。
这个过程并不完美(你会遇到一些小错误,但它们很小,我不会写下这些错误),但我希望它对你有所帮助,就像它会帮助我一样