【问题标题】:Java: Most efficient way to store/retrieve workout information from a file?Java:从文件中存储/检索锻炼信息的最有效方法?
【发布时间】:2010-12-18 22:02:58
【问题描述】:

我正在开发一个 Java 项目,用于将锻炼信息存储在一个平面文件中。每个文件将包含一个练习 (BenchPress.data) 的信息,其中包含时间(自纪元以来的毫秒数)、重量和重复次数。

例子:

1258355921365:245:12

1258355921365:245:10

1258355921365:245:8

存储和检索这些数据的最有效方法是什么?它将被绘制和搜索,以将练习限制在特定日期或日期范围内。

我的想法是将最新信息写入文件顶部,而不是在末尾附加。这样,当我从顶部开始阅读时,我将获得最新的信息,这些信息将匹配大多数搜索(假设)。

但不能保证日期的顺序。无论出于何种原因,用户都可以输入今天的练习,然后进入并输入上周的练习。我是否应该在保存后按日期订购所有信息?

我应该走完全不同的方向吗?我知道数据库是理想的,但这是一个小组项目,管理数据库安装和我们之间的数据同步并不理想。其他人没有数据库经验,这会使评分变得困难。

感谢您的任何意见或建议。

-约翰

【问题讨论】:

    标签: java file store flat


    【解决方案1】:

    不要把事情复杂化。除非您正在处理数百万条记录,否则您可以将整个内容读入内存并以您喜欢的任何方式对其进行排序。并且总是在最后添加记录,这样您就不太可能损坏您的文件。

    【讨论】:

      【解决方案2】:

      对于简单的项目,使用像 JavaDB / Apache Derby 这样的嵌入式可能是个好主意。数据库的配置绝对是最少的,在您的情况下,您可能最多只需要 2 个表(用户和锻炼)。将数据导出到文件对于团队成员之间的同步也相当简单。

      正如 yu_sha 指出的那样,除非期望有一个大型数据集(在 PC 上运行,> 50000),否则您可以使用该文件并将所有内容读入内存。

      【讨论】:

      • +1,当您需要向文件格式添加新列时,使用数据库可帮助您避免中断。
      【解决方案3】:

      通过BufferedReader 读取每一行并使用StringTokenizer 进行解析。查看数据,我可能会将一组字段存储在 List 中,可以根据您的喜好进行迭代和排序。

      【讨论】:

      • 为什么是字段数组?我会说创建一个代表数据的类并将对象存储在一个列表中。
      • 为了提供自己的排序,最好使用类似数组的结构,因为普通 List(不是 ArrayList)不会保证字段顺序。我建议Collections,因为我认为这是讲师希望看到的:)
      【解决方案4】:

      如果您必须以这种格式存储文件,您最好在启动时将整个文件读入内存并将其存储在 TreeMap 或其他排序的、可搜索的地图中。然后您可以使用 TreeMap 的便捷方法,例如 ceilingKey 或类似的 floorKey 来查找某些日期/时间附近的匹配项。

      【讨论】:

        【解决方案5】:

        使用flatworm,一个允许解析和创建平面文件的Java 库。用一个简单的 XML 定义文件描述格式,然后就可以了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-21
          • 1970-01-01
          • 2014-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-06
          • 1970-01-01
          相关资源
          最近更新 更多