-2

维护基于 txt 的数据库文件的最简单方法是什么,该文件允许程序在执行期间写入新条目或编辑现有条目。

具体来说,程序必须能够在登录时存储客户端、IP 和端口,并在客户端注销时相应地删除,而不使用链表等“内部”方法。

编辑:首先感谢建议,但是我忘记提及的文件中有一个限制,该文件必须为 .txt 格式。

确切的格式是

用户名 IP 地址 端口号

爱丽丝 122.33.44.23 1045

鲍勃 121.23.12.34 1078

哪些不同的字段必须用 a 分隔

4

8 回答 8

2

您可能想查看JSONYaml等数据序列化方法或SQLite等轻量级(基于文件但非人类可读的)数据库。

于 2009-04-20T12:51:20.177 回答
2

正如其他几位海报所建议的那样,安装数据库将为您带来某些东西,例如事务安全性和扩展存储内容的可能性(目前,您只需要 IP/端口,但也许稍后您会存储更多东西,也许更永久?)

但是,如果您的要求仍然像您所说的那样简单,那么我将有争议地建议使用 SQL 数据库不是最简单的解决方案(尽管,正如我所说,对于某些要求,数据库确实可以购买你某些事情)。

一个非常简单的解决方案是简单地创建一个目录,每次客户端登录时,您都会在其中创建一个文件,该文件的名称编码您想要的信息(或识别信息的哈希,并在文件中存储额外信息)。然后,当客户端注销时,您删除该文件。您需要注意的问题包括当您的应用程序异常退出时会发生什么,如果您有超过几千个客户端,则会在多个目录中拆分(如果您的文件太多,Windows 似乎会变得很笨)一个目录,尽管原则上您应该能够存储任意数量的文件),并管理文件系统“问题”(病毒检查程序正在访问文件,就像您需要删除...)。

这个简单的解决方案实际上并不像听起来那么糟糕:归档系统实际上是为了有效地访问和索引事物而设计的,就像数据库一样。

于 2009-04-20T13:40:48.013 回答
2

最简单的方法是将其保存在某种数据库中。您尚未指定文件格式的要求,但显而易见的选择是 CSV 文本格式。

H2 数据库尤其支持CSV 表

于 2009-04-20T16:11:41.427 回答
1

我也会使用具有将数据存储在文本文件中的模式的 hsql

http://hsqldb.org/

db 文本文件仍然不是一个简单的 txt 文件,它包含一些带有数据的 sql 语句。http://hsqldb.org/web/hsqlDocsFrame.html

示例 TEXT 数据库文件:

INSERT INTO YOUR_TABLE VALUES('CLIENT1','xyz', .....)
INSERT INTO YOUR_TABLE VALUES('CLIENT2','xyz', .....)
于 2009-04-20T12:59:54.070 回答
1

我使用JAXB将中等大小的数据结构(例如列表)序列化为 XML 文件并返回。好处:

  • JAXB 是 Java SE 6 的一部分,不需要额外的库。
  • (反)序列化大约需要两行代码。
  • XML 是人类可读的。

当然,它不能替代任何真实的数据库。例如,数据中的任何更改都会迫使您重写整个文件——但对于小文件来说,这并不重要。有时需要的是简单性。

于 2009-04-20T13:25:34.197 回答
0

您可以使用 JDBC-ODBC 桥驱动程序并链接到基于文本的 ODBC 连接。

之后,您可以只使用 JDBC 来选择、插入、更新或删除文件上的条目。

但即使这样可行,我还是建议您使用HSQLSQLite或任何其他轻量级数据库。它将更快,更可靠。

祝你好运。

于 2009-04-20T12:52:19.753 回答
0

它不是 Java,但 MySQL 支持 CSV 表类型。 http://dev.mysql.com/doc/refman/5.1/en/csv-storage-engine.html

MySQL 会处理所有困难的事情,例如锁定和多访问,但会给您留下一个无需 MySQL 即可直接读取的文件。

于 2009-04-20T13:13:43.243 回答
0

我建议JavaDB。许多功能,例如可用的嵌入式支持和移动支持。

于 2009-04-20T13:24:24.370 回答