扫码关注官方订阅号
java如何将多个hashmap写入文件,并可以单个存取?
光阴似箭催人老,日月如移越少年。
直接上代码:主要就是使用ObjectOutputStream;多个Map放到List中去,具体可以变通,单个存取,也可以将多个Map放到一个新的Map中去。
public void writeObject(){ try { Map<String, Object> map1 = new HashMap<String, Object>(); map1.put("a1", "a-aaa"); map1.put("a2", "a-bbb"); Map<String, Object> map2 = new HashMap<String, Object>(); map2.put("b1", "b-aaa"); map2.put("b2", "b-bbb"); List<Map<String, Object>> list=new ArrayList<Map<String,Object>>(); list.add(map1); list.add(map2); FileOutputStream outStream = new FileOutputStream("E:/1.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream( outStream); objectOutputStream.writeObject(list); outStream.close(); System.out.println("successful"); } catch (Exception e) { e.printStackTrace(); } } public void readObject(){ FileInputStream freader; try { freader = new FileInputStream("E:/1.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(freader); HashMap<String,Object> map = new HashMap<String,Object>(); List<Map<String, Object>> list=(List<Map<String, Object>>)objectInputStream.readObject(); for (Map<String, Object> map2 : list) { System.out.println(map2.toString()); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
把所谓“单个读取”理解为“可随意仅仅只读取其中一个map的数据而不会将其它map加载到内存中” 这样的话,最简单的实现方式肯定是要用到RandomAccessFile的; 你可以把文件看作一个无穷长度的byte[]数组, 然后问题就化解为:将你的各个map分别序列化为bytes, 写入这个byte[]数组(你的文件),然后在什么地方记录一下各个map在这个byte[]数组中的开始、结束偏移量,这个记录我们不妨叫做“头信息”或“索引”; 至于这个“头信息”或“索引”存在哪里,这个也很随意,看你的需求了,你可以就常驻在内存中,只要不退出程序,你就能依靠这个精确地读取file中的某一个map的数据而不会碰到其它map; 你也可以将这个“头信息”或“索引”存到你这个文件的开始一段bytes里,作为头信息,每次想要读取文件时,先加载头信息,再根据头信息精确地读取某个map
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
直接上代码:主要就是使用ObjectOutputStream;多个Map放到List中去,具体可以变通,单个存取,也可以将多个Map放到一个新的Map中去。
把所谓“单个读取”理解为“可随意仅仅只读取其中一个map的数据而不会将其它map加载到内存中”
这样的话,最简单的实现方式肯定是要用到RandomAccessFile的;
你可以把文件看作一个无穷长度的byte[]数组, 然后问题就化解为:将你的各个map分别序列化为bytes, 写入这个byte[]数组(你的文件),然后在什么地方记录一下各个map在这个byte[]数组中的开始、结束偏移量,这个记录我们不妨叫做“头信息”或“索引”;
至于这个“头信息”或“索引”存在哪里,这个也很随意,看你的需求了,你可以就常驻在内存中,只要不退出程序,你就能依靠这个精确地读取file中的某一个map的数据而不会碰到其它map;
你也可以将这个“头信息”或“索引”存到你这个文件的开始一段bytes里,作为头信息,每次想要读取文件时,先加载头信息,再根据头信息精确地读取某个map