我对Java中不同的读写方法的数量感到非常困惑,并且无法找到符合我需求的方法。
我有一个看起来像这样的文本文件:
CharName{
Sheet{
Vitality{
Short=LP,Name=Life,Base=1000,Equip=0,Buff=0;
Short=LPR,Name=Life regen per sec,Base=50,Equip=0,Buff=0;
}
Magic{
Short=MP,Name=Mana,Base=100,Equip=0,Buff=0;
Short=MPR,Name=Mana regen per sec,Base=5,Equip=0,Buff=0;
}
}
}
它实际上要大得多,但这足以说明我的意思。
我想创建一个基本上看起来像getInfoFromCharFile(sectionName, categoryName, rowNum, tagName)
的函数。
示例:getInfoFromCharFile(Sheet, Vitality, 2, Name)
因此它给了我 50 ),同样也写了saveInfoToCharFile(sectionName, categoryName, rowNum, tagName, newValue)
最重要的是,我试图证明,当其中一个文件被读取时,我有一个简单的方法,即将其加载到' (系统地阅读所有内容) - 这样的事情就像"找到表;找到活力;把所有东西都放在下一个{和}之间;分为; ;。;找到魔术;把所有东西都放在下一个{和};之间。等等等等。 我知道如何进行吐痰和处理,但我怎样才能将其添加到' loading'大括号之间的一切?
注意:我确实阅读过,观看了很多关于Google的内容,但是找不到任何让我了解如何解决问题的内容。我已经好几个星期了!我曾经只是使用属性,但这真的很难实现。
我会告诉你代码加载'在那个解决方案中,但是最后一次我不得不编辑它,它花了我几个小时才能再次理解它 - 所以是的,我猜的代码不是很好,这就是为什么我要这样替换它。
答案 0 :(得分:1)
我认为有两种方法:
艰难的道路: 您坚持使用自定义格式。在这种情况下,您可能必须使用正则表达式来读取文件,您必须准备好处理格式错误的输入等。 您可以使用Matcher或Scanner进行匹配。如果您喜欢冒险,可以通过逐个阅读字符来进行基于状态的解析。 我实际上前一段时间做过something like that,也许你可以从源头中获取灵感......甚至可以使用它,上次我检查过,它有效。 (特别是JONReader可能有用。
简单方法: 使用像XML,JSON这样的标准格式(你的格式已经非常接近了!),甚至是一些CSV的东西。那里有很多可靠的解析器,它可能变得像" charname.getMagic()"一样容易,而不用担心细节。
如果您决定使用JSON,那么对于您的方法而言,这似乎是最合适的事情,我建议您查看minimal-json或Jackson,具体取决于您希望如何使用它。< / p>