当前位置: 代码迷 >> java >> 更新消息摘要时 Arraylist 上的 java.util.NoSuchElementException
  详细解决方案

更新消息摘要时 Arraylist 上的 java.util.NoSuchElementException

热度:63   发布时间:2023-08-02 11:14:46.0

我正在尝试浏览目录并打印其中存在的内容。我正在尝试将它们添加到 MessageDigest.update() 方法以执行 md5 校验和。但是,我遇到了以下错误。

下面提到的是我的代码

public class file_updated {
public static Map extra = new HashMap();
public static void main(String[] args) throws Exception {
    File branches = null;
    List map_list = new ArrayList();
    Map get_val=new HashMap();
    List add_apk = new ArrayList();
    File f2 = new File("C:\\Users\\rishii\\Desktop\\new_creation");

    int count=0;
    for (File file : f2.listFiles()) {
        branches=getFilesRecursive(file);
        add_apk.add(branches);
        count=count+1;
    }

            check_sum(add_apk);




}

public  static void check_sum(List file){
 try {

     MessageDigest Digest = MessageDigest.getInstance("MD5");
     Iterator it2 = file.iterator();
     int count=0;
     while(it2.hasNext())

     {
         System.out.println(count=count+1);
         System.out.println(it2.next().toString());
         Digest.update(it2.next().toString().getBytes());
     }

 }
 catch (Exception ex)
 {
     ex.printStackTrace();
 }
 }


public static   File getFilesRecursive(File file)
{

    if(file.isDirectory())
    {
        for(File file1:file.listFiles())
        {

            return file1;
        }

    }

    return  file;
}

}

下面附上我的堆栈跟踪:

  java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:854)
    at file_updated.check_sum(file_updated.java:61)
    at file_updated.main(file_updated.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)

问题是由

System.out.println(it2.next().toString());
Digest.update(it2.next().toString().getBytes());

您在 while 循环中两次调用方法。 在迭代器上调用next()是获取下一个元素的方式,因此在循环中,当您尝试访问迭代器末尾的第二个元素时,您会不断获取接下来的 2 个元素,从而导致java.util.NoSuchElementException 改成:

while(it2.hasNext()) {
    File f = it2.next();
    System.out.println(count=count+1);
    System.out.println(f.toString());
    Digest.update(f.toString().getBytes());
}
  相关解决方案