사용자가 입력 한 세부 정보가있는 특정 직원을 삭제하려고합니다. java.Deletion에서 직렬화 연산을 사용하여 원하는 방식으로 작업을 수행하지 않습니다. 사용자가 입력 한 세부 정보가있는 직원을 삭제하려고합니다. 그러나 모든 직원을 삭제합니다.어떻게하면 Java에서 직렬화를 사용하여 특정 직원을 삭제할 수 있습니까?
import java.io.*;
import java.util.*;
public class SerializationDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException{
//choice provided to the user
System.out.println("Welcome To Employee Management System");
System.out.println("Enter your choice");
System.out.println("Enter 1:->show employees");
System.out.println("Enter 2:->Create new employee");
System.out.println("Enter 3:->Delete employee");
System.out.println("Enter 4:->quit");
Scanner in = new Scanner(System.in);
int choice = in.nextInt();
ArrayList<Myclass> object1 = new ArrayList<Myclass>();
//insert operation
if(choice==2){
try{
String str1;
String str2;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter number of employees you want to add");
Scanner in1 = new Scanner(System.in);
int num = in1.nextInt();
//ArrayList<Myclass> object1 = new ArrayList<Myclass>();
for(int i=0;i<num;i++){
str1 = br.readLine();
str2 = br.readLine();
object1.add(new Myclass(str1,str2));
}
FileOutputStream fos = new FileOutputStream("Myfile.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(object1);
oos.flush();
oos.close();
}
catch(Exception e){
System.out.println("exception");
e.printStackTrace();
System.exit(0);
}
}
//show operation
if(choice==1){
try{
FileInputStream fis = new FileInputStream("Myfile.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList object2 = (ArrayList)ois.readObject();
ois.close();
System.out.println("employee details "+" "+object2);
}
catch(Exception e){
e.printStackTrace();
}
}
if(choice==3){
System.out.println("Enter name and department of employee you want to delete");
try {
String str3;
String str4;
BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
str3 = br1.readLine();
str4 = br1.readLine();
/*FileInputStream Fs = new FileInputStream("Myfile");
ObjectInputStream Os = new ObjectInputStream(Fs);
ArrayList<Myclass> object3 = (ArrayList<Myclass>)Os.readObject();*/
object1.remove(new Myclass(str3,str4));
FileOutputStream fs = new FileOutputStream("Myfile.txt");
ObjectOutputStream os = new ObjectOutputStream(fs);
os.writeObject(object1);
os.flush();
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
//exit operation
if(choice==4){
System.exit(0);
}
}
}
class Myclass implements Serializable{
String name;
String dname;
public Myclass(String name,String dname){
this.name = name;
this.dname = dname;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return dname;
}
public void setDepartment(String dname) {
this.dname = dname;
}
public String toString(){
return "name = "+" "+name+","+" "+"department = "+" "+dname;
}
}
@Steven 감사합니다.하지만이 작업을 수행 할 수 없습니다. ArrayList는 fail-fast이므로 for 루프를 사용하여 반복 할 수없고 remove를 호출 할 수 없습니다. http://stackoverflow.com/questions/17377407/what-is-fail-safe-fail-fast-iter-iter-in-java-how-they-are-implemented. Iterator를 사용하여 반복을 수행 한 다음 remove를 제거해야합니다. – bitkot
감사합니다. @AmitChotaliya 나는 그것을 추가했습니다 : D –
스티븐 Gunanto. 그것은 작동했습니다 – bablu