2016-07-14 283 views
1

我非常困惑於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

我看到兩種方法可以這樣:

  1. 難的方法: 您堅持使用您的自定義格式。在這種情況下,您可能必須使用正則表達式來讀取文件,您必須準備好處理格式錯誤的輸入等。 您可以使用Matcher或Scanner進行匹配。如果您覺得冒險,可以通過逐個閱讀字符來進行基於狀態的解析。 前段時間我實際上做了something like that,也許你可以從源頭上獲取靈感......甚至可以使用它,上次我檢查了它的工作。 (尤其是JONReader可能是有用的

  2. 最簡單的辦法: 使用標準的格式,如XML,JSON(您的格式已經相當接近反正),甚至一些CSV的東西有很多!對於那些固體解析器在那裏,它可能如果您決定使用JSON,什麼似乎最恰當不過的事情變得像「charname.getMagic()」一樣簡單,無需擔心詳細。

你的方法,我建議看看minimal-jsonJackson,這取決於你想如何使用它。