【问题标题】:java - Reading and writing text in spezific locations inside a .txt filejava - 在 .txt 文件中的特定位置读取和写入文本
【发布时间】:2016-07-14 13:48:43
【问题描述】:

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

最重要的是,我试图让当其中一个文件被读取时,我有一个简单的方法来“加载它”(系统地读取所有内容) - 所以类似于“find sheet;找到 Vitality;获取下一个 { 和 } 之间的所有内容;在 ; 处拆分;.; 找到 Magic ; 在下一个 { 和 }; 之间获取所有内容。依此类推。 我知道如何进行吐痰和处理,但我怎样才能让它“加载”大括号之间的所有内容?

注意:我确实阅读、观看和 Google 了很多关于此的内容,但找不到任何可以让我了解如何解决问题的内容。我已经坐在这个问题上好几个星期了!我以前只使用属性,但很快就变得非常丑陋。

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

【问题讨论】:

  • 从不;曾经;在文本文件中进行内联替换。这是一个万无一失的数据丢失秘诀。也就是说,如前所述,考虑使用标准格式。存在很多。

标签: java io nio


【解决方案1】:

我看到了两种方法:

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

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

如果您决定使用 JSON,什么似乎最适合您的方法,我建议您查看 minimal-jsonJackson,具体取决于您希望如何使用它。

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 2015-05-29
    • 2015-12-14
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多