我运营一个小型在线游戏社区并处理账户数据库。搜索和显示结果[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