大家看我这段删除代码,为什么可以把文件记录删了,但我的测试代码未执行,而且还有一个异常:
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();
}
}
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"); // 这行代码未执行
}
}
要么用for each循环,while迭代器循环
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("d:/StudentMessage.dat")); // 如果这样你每次都 把文件内容了
用ObjectOutputStream写对象有现种方式:追加和替换,你用的是替换