大家看我这段删除代码,为什么可以把文件记录删了,但我的测试代码未执行,而且还有一个异常:
1.System.out.println(key);   
2. System.out.println("safdfasdfdfdsg");  
文件:File f = new File("d:/StudentMessage.dat");               
         键     商品号    商品名称  内容:  1001   ds0966   沐浴露 我是用map.put(Object key,Object values)方法存储的。
/*
*  以下代码:
*/
public class Shop{
  public void deleteShop(){
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的索引:");
str3 = sc.nextLine();
try {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/StudentMessage.dat"));  // 写文件
f = new File("d:/StudentMessage.dat");
ObjectInputStream ois  = new ObjectInputStream( new FileInputStream("d:/StudentMessage.dat"));  // 读文件
if(f.length()!=0){               // 判断文件是否为空
try{
Map map = (Map)ois.readObject();        // 将对象转换为map容器 
 for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
key= iter.next(); 
System.out.println(key);     //  这行代码未执行
if(str3.equals(key)){             // 将键与输入的字符比较
   map.remove(key);   
  System.out.println("safdfasdfdfdsg");   // 这行代码未执行
}
}
 
oos.writeObject(map);  // 将整个容器写到文件里
}catch(ClassNotFoundException e){
 e.printStackTrace();
         }
}

} catch (Exception e) {

e.printStackTrace();
}

}    public static void main(String args[]){
          new Shop().delectShop();
    }
}

解决方案 »

  1.   

                    if(f.length()!=0){               // 判断文件是否为空
                try{
                    Map map = (Map)ois.readObject();        // 将对象转换为map容器 
         //请在这里输出一行试试。如果能输出。那么就是下面for循环写错了。如果不能就是上面的写错了
                     for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
                        key= iter.next(); 
                        System.out.println(key);     //  这行代码未执行
                        if(str3.equals(key)){             // 将键与输入的字符比较
                           map.remove(key);              
                          System.out.println("safdfasdfdfdsg");   // 这行代码未执行
                        }
                    }
                        
      

  2.   

    map 不能用这样的for 循环,
    要么用for each循环,while迭代器循环
      

  3.   


       ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/StudentMessage.dat"));  // 如果这样你每次都 把文件内容了
              用ObjectOutputStream写对象有现种方式:追加和替换,你用的是替换