java io 简单实现对数据的增删改查
大概就是模仿数据库的形式,但是简单。就是想单纯用javaio来实现对数据(可以就是一条字符串)的增加删除查找插入。不知道怎么写,求教,有参考资料也行,多谢大家了怎么能保证...
大概就是模仿数据库的形式,但是简单。就是想单纯用java io 来实现对数据(可以就是一条字符串)的增加 删除 查找 插入。不知道怎么写,求教,有参考资料也行,多谢大家了
怎么能保证存储大量文件呢,10g左右,这时候的查找效率,这是个研究希望能帮忙。二次哈希? 展开
怎么能保证存储大量文件呢,10g左右,这时候的查找效率,这是个研究希望能帮忙。二次哈希? 展开
5个回答
展开全部
// 以下是个简单例子 自己可以扩展分别可以作为一方法
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 因为这最消耗性能了 你可以考虑存入多个文件 分类存入 分类查找 速度稍微好点
最好还是用数据库
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 因为这最消耗性能了 你可以考虑存入多个文件 分类存入 分类查找 速度稍微好点
最好还是用数据库
展开全部
既然是用文件模拟数据库还要高效率,不就是让你直接实现一个nosql服务了,推荐可以用一个map reduce的方式(google用的分布式nosql缓存)
举例:
一个超大文件 每行都是一个数据,遍历文件
如果发现新的行数map.put("每行数据",1) 1代表这个数据出现了一次
;如果已经存储map.put("每行数据",map.get("每行数据")+1);
这样可以通过map的key来查询,删除,插入新的数据,
如果要你统计文件出现最多次数的行数直接比较最大的map value就可以知道是哪行,基本上可以实现一个简单的nosql数据库
举例:
一个超大文件 每行都是一个数据,遍历文件
如果发现新的行数map.put("每行数据",1) 1代表这个数据出现了一次
;如果已经存储map.put("每行数据",map.get("每行数据")+1);
这样可以通过map的key来查询,删除,插入新的数据,
如果要你统计文件出现最多次数的行数直接比较最大的map value就可以知道是哪行,基本上可以实现一个简单的nosql数据库
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用序列化文件怎么样?可以自己定义个数据的格式类,再定义个保存这个数据的集合,然后把这个集合序列化。
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可以试下,好让我参考参考,呵呵
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可以试下,好让我参考参考,呵呵
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
File f=new File(“11.txt”);//创建一个名为11.txt的文件对象
f.CreateNewFile(); //真正地创建文件
f.CreateMkdir()://创建目录
f.delete();//删除文件
f.deleteOnExit();//在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。
然后可以用字节流进行读取。
f.CreateNewFile(); //真正地创建文件
f.CreateMkdir()://创建目录
f.delete();//删除文件
f.deleteOnExit();//在进程退出的时候删除文件,这样的操作通常用在临时文件的删除。
然后可以用字节流进行读取。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Java IO输入信息到文件中,再从文件中取出,就可以增。删。改。查了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询