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

java-读取和写入.txt文件中特定位置的文本,java,io,nio,Java,Io,Nio,我对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{

我对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)

最重要的是,我试图让它成为当其中一个文件被读取时,我有一个简单的方法“加载它”(系统地读取所有内容)-这样的东西就像“查找工作表;找到活力;在下一个{和}之间获取所有内容;在处拆分;;找到魔法;在下一个{和}之间获取所有内容”{和};。等等。 我有一个想法,如何做吐痰和处理,但我如何才能让它“加载”括号之间的一切

注意:我确实阅读、观看和谷歌了很多关于这方面的文章,但找不到任何能让我对如何解决问题有想法的东西。我已经在这个问题上坐了好几个星期了!我过去只使用属性,但很快就变得非常丑陋


我会向您展示该解决方案中要“加载”的代码,但上次我不得不编辑它时,我花了好几个小时才重新理解它-所以是的,我想这不是很好的代码,这就是为什么我要这样替换它。

我看到两种方法:

  • 艰难之路: 您坚持使用自定义格式。在这种情况下,您可能必须使用正则表达式来读取文件,您必须准备好处理格式错误的输入等。 您可以使用Matcher或Scanner进行匹配。如果您有冒险精神,可以通过逐个读取字符来执行基于状态的解析。 我之前确实做过,也许你可以从源头上获得灵感…或者甚至使用它,上次我检查时,它起了作用。(尤其是这个可能有用。)

  • 简单的方法: 使用标准格式,如XML、JSON(无论如何,您的格式已经非常接近了!),甚至是一些CSV格式的东西。有很多可靠的解析器可供使用,它可能会变得像“charname.getMagic()”一样简单,而无需担心细节


  • 如果你决定使用JSON,对于你的方法来说,最合适的事情是什么,我建议看一下,或者取决于你想如何使用它。

    永远;永远不要在文本文件中做内联替换。这是数据丢失的可靠方法。正如所提到的,考虑使用标准格式。存在很多。