在此代码中,我得到一个java.util.ConcurrentModificationException的方法是在互联网服务和首先读取该文件,并检查是否vakNaam是在文件中.然后它将被删除,文件将被重写.异常2抛出异常(在println中)
@WebMethod
public boolean removeVak(String naam){
ArrayList<String> tempFile = new ArrayList<String>();
//Read the lines
boolean found = false;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("C:/vak.txt"));
String strLine;
while ((strLine = br.readLine()) != null){
tempFile.add(strLine);
}
}catch(Exception e){
System.out.println("Exception " + e);
}finally {
try {
if (br != null)
br.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//Write the lines
BufferedWriter out= null;
try{
for(String s : tempFile){
String [] splitted = s.split(" ");
if(splitted[0].equals(naam)){
tempFile.remove(s);
found = true;
}
}
out = new BufferedWriter(new FileWriter("C:/vak.txt", false));
for(String s: tempFile){
out.newLine();
out.write(s);
}
out.close();
} catch (Exception e) {
System.out.println("Exception2 " + e);
return false;
}finally {
try {
if (out != null)
out.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return found;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*han 31
错误在于此部分:
for (String s : tempFile){
String [] splitted = s.split(" ");
if (splitted[0].equals(naam)){
tempFile.remove(s);
found = true;
}
}
Run Code Online (Sandbox Code Playgroud)
不要修改您正在迭代的列表.您可以通过Iterator明确使用来解决这个问题:
for (Iterator<String> it = tempFile.iterator(); it.hasNext();) {
String s = it.next();
String [] splitted = s.split(" ");
if (splitted[0].equals(naam)){
it.remove();
found = true;
}
}
Run Code Online (Sandbox Code Playgroud)
Java 5增强for循环使用下面的Iterator.因此,当您从tempFile中删除时,失败快速自然会启动并抛出并发异常.使用迭代器并调用其remove方法,该方法将从基础Collection中删除.
| 归档时间: |
|
| 查看次数: |
33879 次 |
| 最近记录: |