繁体   English   中英

Java:从文件存储/检索锻炼信息的最有效方法?

[英]Java: Most efficient way to store/retrieve workout information from a file?

我正在一个Java项目中上课,该项目将锻炼信息存储在一个平面文件中。 每个文件将具有一个练习(BenchPress.data)的信息,该信息包含时间(自纪元以来的毫秒数),权重和重复次数。

例:

1258355921365:245:12

1258355921365:245:10

1258355921365:245:8

存储和检索此数据的最有效方法是什么? 将对它进行图形化和搜索,以将练习限制在特定日期或日期范围内。

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

但是,不能保证日期顺序。 无论出于何种原因,用户都可以今天参加锻炼,然后进入最后几周进行锻炼。 保存时,我是否该点击一下以按日期订购所有信息?

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

因此,感谢您的任何建议。

-约翰

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM