将自定义对象的 ArrayList 写入文件

2023-12-08

我有一个 ArrayList,其中包含自定义服务对象。我想将整个 ArrayList 写入一个文件,然后能够读取它。

我尝试了 Gson,但它给了我一个 IllegalStateException: Expected BEGIN_ARRAY but was STRING。我让它记录应该是 JSON 的字符串,它在其中说了很多异常(作为字符串内的文本..也许转换出了问题?)。

public int saveListToFile(){
        String filename = "service_entries";
        File file = new File(getFilesDir(), filename);
        try {
            BufferedWriter buffWriter = new BufferedWriter(new FileWriter(file, true));

            Gson gson = new Gson();
            String json = gson.toJson(services); //this is the ArrayList<Service>

            buffWriter.append(json);
            buffWriter.newLine();
            buffWriter.close();
        } catch (IOException e) {
            return -1;
        }

        return 0;
}

public int readCurrentList(){   
        String filename = "service_entries";

        File file = new File(getFilesDir(), filename);  
        try {
            BufferedReader buffReader = new BufferedReader(new FileReader(file));

            String line1, line2;
            Gson gson = new Gson();

            line1 = buffReader.readLine();
            line2 = buffReader.readLine();

            if(line1 == null){
                buffReader.close();
                return 0;
            }

            Type type = new TypeToken<ArrayList<Service>>(){}.getType();
            services = gson.fromJson(line1, type);

            ArrayList<Service> list2;
            if(line2 != null){
                list2 = gson.fromJson(line2, type);

                services.addAll(list2);
                list2 = null;
            }

            buffReader.close();
        } catch(IOException e){
            return -1;
        }

        return 0;
}

public class Service {

        private double quantity;
        private String description;

        public Service(){
            quantity = 0.0;
            description = null;
        }

}

我建议对此类操作使用序列化。您可以实现 Java 的 Serialized 接口,然后可以将对象压缩到 .ser 文件中,然后从该文件中将它们膨胀回来,以从中调用您需要的方法。

这是关于序列化的一个很好的教程 -http://www.tutorialspoint.com/java/java_serialization.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将自定义对象的 ArrayList 写入文件 的相关文章

随机推荐

  • DateTimeFormatter 解析 - 时区名称和夏令时重叠时间

    为了提高某些遗留代码的性能 我正在考虑用 java time format DateTimeFormatter 替换 java text SimpleDateFormat 执行的任务之一是解析使用 java util Date toStri
  • 在 Java 控制台应用程序中使用 Windows“cls”命令清除屏幕

    我正在开发一款游戏 该游戏需要在每回合后清除屏幕以提高可读性 唯一的问题是我无法使用基于 Windows 命令提示符的 cls 命令 并且它不支持 ANSI 转义字符 我在下一页上使用了 Dyndrilliac 的解决方案 但它导致了 IO
  • 如何从我的应用程序打开谷歌日历应用程序?

    我想从我的应用程序打开 Google 日历应用程序 我有以下代码 但它崩溃了 if Utils isPackageInstalled PACKAGENAME getApplicationContext intent new Intent I
  • 是否可以本地化 web.config 文件中的 appSettings 信息?

    我有这样的想法
  • 在 MySQL 查询中创建和桥接表

    我正在为 MySQL 数据库进行基本表设计 该数据库项目是作为一个想法提出的 主要用于教育目的 总共有 11 个表 其中 2 个用于桥接目的 我尝试正确设置主键和外键 我不知道如何编写将创建 11 个表并同时桥接所有表的查询 HERE我附上
  • 节目统计工具

    有没有一个工具能够解析我的源代码 fortran C 或 C 并返回统计信息 例如循环数 平均循环大小 函数数 函数调用数 数量 大小和数组 变量等的类型 类似的东西this在我的架构上运行起来并不容易 神奇的谷歌术语是 代码指标 维基百科
  • 从 C# 中的字符串中删除后跟空格或空格之前的单词或字符

    我有一根绳子 string name AL QADEER UR AL REHMAN AL KHALIL UN 我如何删除所有字符AL UR UN或者可能还有更多类似的事情 我的字符串应该是这样的 卡迪尔 雷赫曼 哈利勒 目前我正在尝试这样做
  • Java 中的接口如何工作?

    我正在自学 Java 并且我被困在有关接口的一章中 我根本无法理解它们在 Java 中是如何工作的 我相信我完全理解界面的含义以及它们如何应用于日常情况和技术 但当涉及到 Java 时 无论是代码方面还是逻辑方面 我都陷入了困境 我不明白
  • Swing - 根据单元格的值设置单元格的颜色

    我想根据单元格的值设置单元格的颜色 在谷歌搜索了一下后 我发现我可以使用这样的东西来做到这一点 public class TableCellRenderer extends DefaultTableCellRenderer Override
  • 是否有用于构建在浏览器中运行的桌面应用程序的开源框架? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有兴趣启动一个开源项目 该项目可以打包为非技术最终用户的桌面应用程序 但可以在浏览器中运行 一个现有模型是谷歌精炼 我正在寻找一个现有的开源框架这
  • 可以用innerHTML插入脚本吗?

    我尝试使用以下命令将一些脚本加载到页面中innerHTML on a div 该脚本似乎已加载到 DOM 中 但从未执行过 至少在 Firefox 和 Chrome 中 有没有办法让脚本在插入时执行innerHTML 示例代码 Should
  • 空手道 - 如何导入 json 数据

    我想将一些 JSON 数据导入到我的测试中 为了记录我应该这样做 def data read classpath init data json 我已经使用以下内容创建了 JSON 文件 name ehsan 这是我的代码 Backgroun
  • 在 DirectShow 中预览相机并捕获静态图像 - 在 VB.net 中

    我正在尝试在 Visual Studio 2008 中编写一个程序 该程序将访问网络摄像头 在屏幕上显示预览 然后在按下按钮时保存静态快照 jpg 稍后我将把它与数据库集成 但我不应该对那部分有问题 经过一些研究后 看起来 DirectSh
  • 正则表达式从代码中删除方法

    使用正则表达式 我尝试从以下代码中删除所有方法 函数 不考虑 全球范围 但是 我无法使其与方法的所有内部内容匹配
  • 请求多个 API 并在 SQLITE 上存储多个表的最佳方式

    问题是 如何在sqlite上存储 我的意思是如何在 2 个表上存储 2 个 API 数据 我有多个 API 来获取和存储缓存中的数据 目前 我一项一项地做 如下所示 按下按钮 await HelperDatabase1 storeRegis
  • 在 App Engine 上设置 Memcached 以进行 Django 会话缓存

    当设置 Django 使用 Memcached 进行缓存时 在我的例子中 我想使用会话缓存 settings py we set CACHES default BACKEND django core cache backends memca
  • Swift:数组排序未正确完成

    我用它来对 Swift 数组中的组件进行排序 myArray myArray sorted 0 localizedCaseInsensitiveCompare 1 NSComparisonResult OrderedAscending 但是
  • 如何在 x86_64 上的前 4GB 内“malloc”

    平台 Mac OS X郎 Obj C C 是否有可能以某种方式使 malloc 在进程地址空间的前 4GB 内分配内存 我正在模拟 i386 堆栈 需要保证地址位于允许的 32 位范围内 使用 mmap MAP FIXED 需要在任何 ma
  • 如何在 Verilog 中定义带参数的模块?

    我想定义一个add有一个参数的模块 但我对新实例的声明进展不顺利 我想定义这个模块的一个实例 module add parameter wd 1 input wire wd 1 0 a b output wire wd 1 0 o assi
  • 将自定义对象的 ArrayList 写入文件

    我有一个 ArrayList 其中包含自定义服务对象 我想将整个 ArrayList 写入一个文件 然后能够读取它 我尝试了 Gson 但它给了我一个 IllegalStateException Expected BEGIN ARRAY b