- Java code
public int Register(User u){ map=new HashMap<String, User>(); try { dos=new ObjectOutputStream(new FileOutputStream("user.data")); dis=new ObjectInputStream(new FileInputStream("user.data")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { map=(HashMap<String, User>)dis.readObject(); } catch (IOException e1) { // TODO Auto-generated catch block int a=map.size(); System.out.println(a+"!!!!!!!!!!!!!!!!!!!!"); } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } map.put(u.getUname(), u); try { dos.writeObject(map); dos.close(); dis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return 1; }
这是一个注册功能 我想每次注册都取出map 然后再put进去一个新的值。
但是每次都是提示空指针。
System.out.println(a+"!!!!!!!!!!!!!!!!!!!!");
a永远是0.
是哪里出的错?谢谢各位大神
------解决方案--------------------------------------------------------
FileOutputStream 和 FileInputStream 不要同时打开!
1、先用FileInputStream把内容读取出来,然后关闭文件;
2、处理Map,增加值啥的;
3、最后用FileOutputStream,写入完毕后,再关闭文件。