我運營一個小型在線遊戲社區並處理賬戶數據庫。搜索和顯示結果[java]
的設置是這樣的:一個名爲
文件夾帳戶 裏面的帳戶目錄中,有一個由玩家名稱組織200,000+的文本文件。手動訪問此文件夾是一件痛苦的事情,因爲需要使用RAM來搜索和搜索文件。我覺得這很不方便。
我訪問這個目錄來發送密碼提示或誰打得最長的高分。
以下是一個帳戶文件的示例。這個文件被命名的Falcon.txt
[ACCOUNT]
character-username = Falcon
character-password = falconpassword
[INFO]
character-coordx = 3252
character-coordy = 3432
character-active = yes
character-ismember = 1
character-messages = 5
character-lastconnection = [removed]
character-lastlogin = 2009-11-29
character-energy = 100
character-gametime = 193
character-gamecount = 183
[EQUIPMENT]
character-equip = 0 4724 0
character-equip = 1 1052 0
character-equip = 2 6585 0
character-equip = 3 4151 0
character-equip = 4 4720 0
character-equip = 5 1215 0
character-equip = 6 -1 0
character-equip = 7 4722 0
character-equip = 8 -1 0
character-equip = 9 775 0
character-equip = 10 1837 0
character-equip = 11 -1 0
character-equip = 12 6735 0
character-equip = 13 -1 0
[APPEARANCE]
character-look = 0 1
character-look = 1 1
character-look = 2 2
character-look = 3 3
character-look = 4 5
character-look = 5 2
[STATS]
character-skill = 0 1 0
character-skill = 1 1 0
character-skill = 2 1 0
character-skill = 3 1 0
character-skill = 4 1 0
character-skill = 5 1 0
character-skill = 6 1 0
character-skill = 7 1 0
character-skill = 8 1 0
character-skill = 9 1 0
character-skill = 10 1 0
character-skill = 11 1 0
character-skill = 12 1 0
character-skill = 13 1 0
character-skill = 14 1 0
character-skill = 15 1 0
character-skill = 16 1 0
character-skill = 17 1 0
character-skill = 18 1 0
character-skill = 19 1 0
character-skill = 20 1 0
[ITEMS]
[BANK]
[FRIENDS]
[IGNORES]
[END]
這是一個巨大的數據庫,通過在值的文件目錄中進行搜索。
值我的意思是通過條目ID或IP地址來查找和跟蹤其他帳戶。
但是,我有一個新的問題,我的發展是崩潰。
正如您在文件中看到的那樣,行按標籤組織。
character-equip = 0 4724 1
如果我把值4724放在我的搜索應用程序中,我希望它打印出找到的搜索結果右側的值1標籤。我希望它只打印出找到的結果的值,而不是額外的結果。
所以搜索看起來是這樣的:
1 「輸入項目找到:」
2: 「賬戶Falcon.txt具有1」 「輸入項尋4724」
按任意鍵繼續......
,或者出現向具備項目
character-equip = 5 1239 102
1.生產更多的數量「中輸入項目找到:」
2.「輸入項尋: 1239「
3.」帳戶Falcon2.txt有102!「
按任意鍵繼續...
我只是想輸入一個項目ID,並讓它顯示找到的值後的值。白色空間是一個選項卡。我試過這樣做,獲得任何結果的唯一成功方法是在搜索詞之間插入一個製表符。所以,如果我想找到的CMD線項目1239 ID類型此:
Enter item to find:<tab>1239<tab>
它將然後搜索並顯示在它該項目的賬戶。但是,我仍然需要單獨打開帳戶來查找該項目的數量。如果找到該值,我希望搜索結果顯示該項目的數量。但是,如果該值是一個數量,它試圖搜索一個標籤,我希望它可以跳過它或說零。
這就是我的意思。
character-equip = 0 1024 1239
Enter item to find: 1239
如果它擊中這個賬戶我要讓搜索結果顯示爲零,如果它不能使用Tab鍵或查看空白的任何值。所以它會顯示爲空或零 帳戶Falcon3.txt爲空!
或
Account Falcon3.txt has 0!
我已經嘗試這樣做,但我不能確定如何實現這一目標。
這是我的代碼。
import java.io.*;
import java.util.*;
public class ItemDatabase {
public static void main(String args[]) {
System.out.print("Enter item to find: ");
Scanner sc = new Scanner(System.in);
find(sc.nextLine());
}
public static void find(String delim) {
File dir = new File("accounts");
if (dir.exists()) {
String read;
try {
File files[] = dir.listFiles();
for (int i = 0; i < files.length; i++) {
File loaded = files[i];
if (loaded.getName().endsWith(".txt")) {
BufferedReader in = new BufferedReader(new FileReader(loaded));
StringBuffer load = new StringBuffer();
while ((read = in.readLine()) != null) {
load.append(read + "\n");
}
String delimiter[] = new String(load).split(delim);
if(delimiter.length > 1) {
System.out.println("Account " + loaded.getName() + "has " + delimiter[1] + "!");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("error: dir wasn't found!");
}
}
}
謝謝你們,我希望你能幫助我。
200.000帳戶!您將文件集合稱爲數據庫,是否有一個原因,您爲什麼沒有設置數據庫來保存所有這些數據?如果你這樣做了,這個搜索將是系統的一個幾乎隱含的功能。 – rsp 2009-12-29 09:52:02
rsp:有時開發這些東西開始作爲個人愛好項目的朋友,然後它只是有點爆炸的大小。很少有準備工作在他們的愛好項目中大量使用。 – Esko 2009-12-29 11:22:03