Java 将键和值从映射写入文件

Java 将键和值从映射写入文件,java,iteration,Java,Iteration,使用下面的代码,我试图将男性和女性映射的键和值写入现有文件 但它显示了以下错误 谁能帮帮我吗 ERROR@Map.Entry=(Map.Entry)entryIter.next(); java.util.NoSuchElementException 位于java.util.LinkedHashMap$LinkedHashIterator.nextEntry(未知源) 位于java.util.LinkedHashMap$EntryIterator.next(未知源) 位于java.util.Lin

使用下面的代码,我试图将男性和女性映射的键和值写入现有文件

但它显示了以下错误

谁能帮帮我吗

ERROR@Map.Entry=(Map.Entry)entryIter.next();
java.util.NoSuchElementException
位于java.util.LinkedHashMap$LinkedHashIterator.nextEntry(未知源)
位于java.util.LinkedHashMap$EntryIterator.next(未知源)
位于java.util.LinkedHashMap$EntryIterator.next(未知源)
at test.main(test.java:83)
代码

publicstaticvoidmain(字符串[]args){
Map MaleMap=新建LinkedHashMap();
Map FemaleMap=新建LinkedHashMap();
试一试{
Scanner Scanner=新扫描仪(新文件读取器(“.txt”);
while(scanner.hasNextLine()){
字符串nextLine=scanner.nextLine();
String[]column=nextLine.split(“:”);
if(column[0].equals(“Male”)&&(column.length==4)){
MaleMap.put(列[1],
asList(列[2],列[3]);
}else如果(列[0]。等于(“女性”)&&(列.length==4)){
FemaleMap.put(列[1],
asList(列[2],列[3]);
}
}
Set entries=MaleMap.entrySet();
Iterator entryIter=entries.Iterator();
while(entryIter.hasNext()){
Map.Entry=(Map.Entry)entryIter.next();
Object key=entry.getKey();//从条目中获取密钥。
List value=(List)entry.getValue();
对象值1=“”;
对象值2=“”;
int计数器=0;
for(对象列表项:(列表)值){
Writer=null;
对象名称=键;
对象年龄=空;
对象maleID=null;
如果(计数器==0){//第一次传递将值分配给值1
value1=列表项;
计数器+++;//下一个过程的增量
}else如果(计数器==1){//第二遍将值赋给value2
value2=列表项;
计数器+++;//因此我们不会继续为进一步的迭代重新分配listItem
}
}
System.out.println(键+“:“+value1+”,“+value2”);
scanner.close();
Writer=null;
对象名称=键;
对象年龄=值1;
对象maleID=value2;
试一试{
字符串filename=“.txt”;
FileWriter fw=newfilewriter(filename,true);//true将附加新数据
fw.write(maleAge+“+maleID+”@;“+”\n”
+:class:+maleName);//将字符串附加到文件中
fw.close();
}捕获(例外e){
e、 printStackTrace();
}
}
Set Fentries=FemaleMap.entrySet();
迭代器FentryIter=Fentries.Iterator();
while(fentryter.hasNext()){
Map.Entry=(Map.Entry)entryIter.next();
Object Fkey=entry.getKey();//从条目中获取密钥。
List value=(List)entry.getValue();
对象值1=“”;
对象值2=“”;
int计数器=0;
for(对象列表项:(列表)值){
Writer=null;
对象femaleName=Fkey;
对象femaleAge=null;
对象femaleID=null;
如果(计数器==0){//第一次传递将值分配给值1
value1=列表项;
计数器+++;//下一个过程的增量
}else如果(计数器==1){//第二遍将值赋给value2
value2=列表项;
计数器+++;//因此我们不会继续为进一步的迭代重新分配listItem
}
}
System.out.println(Fkey+“:“+value1+”,“+value2”);
scanner.close();
Writer=null;
对象femaleName=Fkey;
对象女性年龄=值1;
对象femaleID=value2;
试一试{
字符串filename=“.txt”;
FileWriter fw=newfilewriter(filename,true);//true将附加新数据
fw.write(“映射:“+femaleName+”a:Bridge;“+”\n”
+:属性“+femaleAge+”;“+”\n
+“:列“+”“+femaleID+”+“+”;”;//将字符串追加到文件中
fw.close();
}捕获(例外e){
e、 printStackTrace();
}
}
}
}
Map.Entry=(Map.Entry)entryIter.next()正在中断

在第一个while循环遍历male之后,迭代器已到达集合的末尾,当您尝试调用
next()
时,迭代器将中断

你真正想做的是迭代你的女性

将行更改为使用
FentryIter
进行迭代:

while (FentryIter.hasNext()) {
   Map.Entry entry = (Map.Entry) FentryIter.next();
这很可能是复制粘贴代码的结果,执行此操作时需要小心。我建议你重新分解你的代码,因为有太多的代码是重复的