java io 简单实现对数据的增删改查

大概就是模仿数据库的形式,但是简单。就是想单纯用java io 来实现对数据(可以就是一条字符串)的增加 删除 查找 插入。不知道怎么写,求教,有参考资料也行,多谢大家了
怎么能保证存储大量文件呢,10g左右,这时候的查找效率,这是个研究希望能帮忙。二次哈希?

// 以下是个简单例子 自己可以扩展分别可以作为一方法
File file = new File("D:/e.txt");
try {
if (!file.exists()) {
file.createNewFile();
}
// 添加
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
fileOutputStream.write("[id=1,userName=管理员,passWord=admin]\r\n"
.getBytes("UTF-8"));// 格式自由定义
fileOutputStream.close();
// 修改 id=1
int id = 1;
String userName = "周述兵";
String passWord = "zsb";
// 用输入流读取数据 也就是查询
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[fileInputStream.available()];
fileInputStream.read(bytes);
String[] datas = new String(bytes, "UTF-8").split("\r\n");// 根据每天数据间的区别来划分为数组
for (int i = 0; i < datas.length; i++) {
System.out.println(datas[i]);
if (datas[i].indexOf("[id=" + id) >= 0) {
datas[i] = "[id=" + id + ",userName=" + userName
+ ",passWord=" + passWord + "]";
}
}
fileInputStream.close();
// 用输出流重新写入数据
fileOutputStream = new FileOutputStream(file, false);
String writeData = "";
for (String data : datas) {
writeData += data + "\r\n";
}
fileOutputStream.write(writeData.getBytes("UTF-8"));
fileOutputStream.close();
// 删除和修改有所略同
} catch (Exception e) {
e.printStackTrace();
}

//如果考虑效率的话 我建议不要用 io 因为这最消耗性能了 你可以考虑存入多个文件 分类存入 分类查找 速度稍微好点
最好还是用数据库
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-06
既然是用文件模拟数据库还要高效率,不就是让你直接实现一个nosql服务了,推荐可以用一个map reduce的方式(google用的分布式nosql缓存)
举例:
一个超大文件 每行都是一个数据,遍历文件
如果发现新的行数map.put("每行数据",1) 1代表这个数据出现了一次
;如果已经存储map.put("每行数据",map.get("每行数据")+1);
这样可以通过map的key来查询,删除,插入新的数据,
如果要你统计文件出现最多次数的行数直接比较最大的map value就可以知道是哪行,基本上可以实现一个简单的nosql数据库
第2个回答  2010-08-05
用序列化文件怎么样?可以自己定义个数据的格式类,再定义个保存这个数据的集合,然后把这个集合序列化。

public class Data implements Serializable {
//数据的格式
}

public class DataCollection<E> implements Serializable {
private HashSet<E> set = new HashSet<E>();
//操作数据的方法放在这里,也就是增删改查
}

public class OperaFile {
public static void save(String path, Serializable data) {
//将文件序列化
FileOutputStream file = new FileOutputStream(path);
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(data);
}
public Object void open(String path) {
//同理
}
}

不过没试过10G的文件要序列化多少,LZ可以试下,好让我参考参考,呵呵本回答被提问者采纳
第3个回答  2010-08-04
File f=new File(“11.txt”);//创建一个名为11.txt的文件对象
f.CreateNewFile(); //真正地创建文件
f.CreateMkdir()://创建目录
f.delete();//删除文件
f.deleteOnExit();//在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。

然后可以用字节流进行读取。
第4个回答  2010-08-04
Java IO输入信息到文件中,再从文件中取出,就可以增。删。改。查了
相似回答