2016-01-10 22 views
1

我是Java语言新手,尝试制作RESTful服务。我的DELETE函数有问题。我尝试在删除值后将新的arrayList保存在我的文件中。在我的控制台中,我想要删除的值被删除,但在我的文件中,仍然存在。如何从txt.file中删除RESTful Java

@GET 
@Path("/arraylist") 
public ArrayList<Student>displayJsonFile() throws IOException{ 
    ArrayList<Student> students = new ArrayList<Student>(); 

    File jsonFile = new File("/students.txt"); 
    Scanner fileInput = new Scanner(jsonFile); 
    Gson gson = new Gson(); 
    while (fileInput.hasNextLine()){  
     String jsonLine = fileInput.nextLine(); 

     Student singleStudent = gson.fromJson(jsonLine, Student.class); 
     students.add(singleStudent); 
    } 
    fileInput.close(); 
    return students;  
} 



@DELETE 
@Path("/delUser/{id}/{name}/{yearOfBirth}") 

    public String delStudents(@PathParam("id") String id, @PathParam("name") String name,@PathParam("yearOfBirth") int yearOfBirth) throws IOException{ 

     Student delStudent = new Student(); 
     delStudent.setId(id); 
     delStudent.setName(name); 
     delStudent.setYearOfBirth(yearOfBirth); 

     ArrayList<Student> studentss = new ArrayList<Student>(); 
     for(int j = 0 ; j<displayJsonFile().size(); j++){ 

      studentss.add(j, displayJsonFile().get(j)) ; 

     } 

     for(int i=0;i<displayJsonFile().size();i++){ 

      if(studentss.get(i).equals(delStudent)){ 
       studentss.remove(i); 
       break; 
      } 
     } 

     return "Student deleted !"; 

    } 
+0

您是否考虑将数据保存回文件? – MadProgrammer

回答

1

您不必在DELETE方法的任何代码,从文件中删除学生。

这段代码应该做到这一点。

@DELETE 
@Path("/delUser/{id}/{name}/{yearOfBirth}") 

    public String delStudents(@PathParam("id") String id, @PathParam("name") String name,@PathParam("yearOfBirth") int yearOfBirth) throws IOException{ 

     Student delStudent = new Student(); 
     delStudent.setId(id); 
     delStudent.setName(name); 
     delStudent.setYearOfBirth(yearOfBirth); 

     ArrayList<Student> studentss = new ArrayList<Student>(); 
     for(int j = 0 ; j<displayJsonFile().size(); j++){ 

      studentss.add(j, displayJsonFile().get(j)) ; 

     } 
     for(int i=0;i<displayJsonFile().size();i++){ 

      if(studentss.get(i).equals(delStudent)){ 
       studentss.remove(i); 
       break; 
      } 
     } 

     File oldJsonFile = new File("/students.txt"); 
     oldJsonFile.delete(); 
     File jsonFile = new File("/students.txt"); 
     FileWriter fw = new FileWriter(fnew, false); 
     for (Student student : studentss) { 
      // Add a public String toJsonString method to your student 
      // class to convert your Student object to json 
      // or use Gson's serializer and call it here to generate json 
      fw.write(student.toJsonString()); 
     } 
     fw.close(); 
     return "Student deleted !"; 

    } 
+0

java语言中没有'foreach'! – bobbel

+0

感谢您的帮助。这非常有用。如果你不介意的话,我想问你另一件事。我如何使我的文件路径,通用路径,因为我使用整个路径,例如:C:/Users/Lucky/workspace/App/WebContent/students.txt,并且我在另一台PC上运行时遇到问题。首先我试试:this.getClass()。getResourceAsStream(“/ students.txt”);第二种方法:this.getClass()。getResource(“/students.txt”).getPath()。 ,但没有任何成功。谢谢。 –