java - 在.txt文件中的特定位置读取和写入文本

问题描述:

我非常困惑于Java中不同读写方法的数量,并且找不到符合我需求的文件。java - 在.txt文件中的特定位置读取和写入文本

我有一个文本文件,它看起来像这样:

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),以便它给了我),也同样以书面形式saveInfoToCharFile(sectionName, categoryName, rowNum, tagName, newValue)

最重要的是来自我试图使它的是,当这些文件的人会读,我有“加载它在”(读取系统一切)一个简单的方法 - 这样的东西古话叫做“找到;在分裂;找到活力;得到的一切,在未来{和}之间。找到魔法;让下一个之间的一切{和} ;.等等等等。 我有一个想法如何做吐温和处理,但我怎样才能'加载'大括号之间的一切?

注意:我的确看过,看过很多关于这方面的内容,但是找不到任何能让我知道如何解决问题的东西。我现在坐这个问题好几周了!我以前只是使用属性,但真的很难看。

我会告诉你在那个解决方案中'加载'的代码,但是最后一次我不得不编辑它,它真的花了我几个小时的时间来再次理解它 - 所以是的,我猜不是很好的代码,这就是为什么我想要这样替换它。

+0

永远;永远。在文本文件中进行内联替换。这是数据丢失的绝好办法。也就是说,如前所述,请考虑使用标准格式。其中有很多存在。 – fge

我看到两种方法可以这样:

  1. 难的方法: 您坚持使用您的自定义格式。在这种情况下,您可能必须使用正则表达式来读取文件,您必须准备好处理格式错误的输入等。 您可以使用Matcher或Scanner进行匹配。如果您觉得冒险,可以通过逐个阅读字符来进行基于状态的解析。 前段时间我实际上做了something like that,也许你可以从源头上获取灵感......甚至可以使用它,上次我检查了它的工作。 (尤其是JONReader可能是有用的

  2. 最简单的办法: 使用标准的格式,如XML,JSON(您的格式已经相当接近反正),甚至一些CSV的东西有很多!对于那些固体解析器在那里,它可能如果您决定使用JSON,什么似乎最恰当不过的事情变得像“charname.getMagic()”一样简单,无需担心详细。

你的方法,我建议看看minimal-jsonJackson,这取决于你想如何使用它。