Java不中断循环中的单个异常处理

问题描述

如下代码。问题在注释里描述了public static List<ProfileEntity> getProfiles(String dir){File dirFile = new File(dir);if(dirFile.isFile()) dirFile = dirFile.getParentFile();final File[] fList = dirFile.listFiles();List<ProfileEntity> plist = null;if(fList != null){plist = new ArrayList<ProfileEntity>();for(File f : fList){if(!f.getName().endsWith(".xml")) continue;try {// 此处的GetProfile方法抛出异常,但整个循环不能因为它的异常而中断,必须循环到最后。当循环完成之后,方法返回那些没有出现异常的数据,也需要把异常抛给上层。// 这个,要怎么实现?请各位对异常熟悉的朋友解答一下。先谢谢了。 ProfileEntity pe = getProfile(f);pe.setFileName(f.getName());plist.add(pe);} catch (ParseException e) {Log.e("AndroidExam", "Error of Parser : "+e.getMessage());continue; }}}return plist;} 问题补充:AngelAndAngel 写道

解决方案

你也可以把plist作为个参数传进来List是引用类型,类似如下:public static void main(String[] args) {List list = new ArrayList();asdf.ss(list);System.out.println(list.get(0));}public static void ss(List list ){list.add("a");} } return plist; }
解决方案二:
要不就这样public static List<ProfileEntity> getProfiles(String dir){ File dirFile = new File(dir); if(dirFile.isFile()) dirFile = dirFile.getParentFile(); final File[] fList = dirFile.listFiles(); List<ProfileEntity> plist = null; if(fList != null){ plist = new ArrayList<Object>(); for(File f : fList){ if(!f.getName().endsWith(".xml")) continue; try { // 此处的GetProfile方法抛出异常,但整个循环不能因为它的异常而中断,必须循环到最后。当循环完成之后,方法返回那些没有出现异常的数据,也需要把异常抛给上层。 // 这个,要怎么实现?请各位对异常熟悉的朋友解答一下。先谢谢了。 ProfileEntity pe = getProfile(f); pe.setFileName(f.getName()); plist.add(pe); } catch (ParseException e) { Log.e("AndroidExam", "Error of Parser : "+e.getMessage()); plist.add(e); } } } return plist; } 回到外面后,for(Object o : plist) { if(o instanceof ProfileEntity) { xxxxxxxx } else { xxxxxx }}
解决方案三:
直接设置一个数组保存 exception 在catch里
解决方案四:
用个字段标识下,如果捕获的异常了先不抛出方法最后抛出这个异常就行啊
解决方案五:
你说的异常返回给上层是什么意思? 是需要仅仅文字说明还是什么?你原先的代码中应该可以将不抛异常的plist返回给上层,如果你需要异常的内容,你可以从上层传递一个变量用来记录你的异常,并在catch中改变这个变量的值,例如你传入一个Lisr errLlist 的变量,在catch中就可以用 errList.add(...)记录日常,在上层该方法完成后,直接读取errList的值即可
解决方案六:
在catch中自己构造错误的提示返回啊

时间: 2024-09-27 20:29:54

Java不中断循环中的单个异常处理的相关文章

Java集合类ArrayList循环中删除特定元素

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素.本文将讲解Java集合类ArrayList循环中删除特定的元素.   在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: [java] view plaincopy for(int i = 0 , len= list.size();i<len;++i){     if(list.get(i)==XXX){          list.remove(i);     }   }   上面这

java集合类arraylist循环中删除特定元素的方法_java

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }  上面这种方式会抛出如下异常:   Exception in thread "main" java.lan

Java怎样中断一个运行中的线程

程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决, 将导致意外的行为以及细微的.难以发现的错误. 在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 背景中断(Interrupt)一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地中止其 当前的操作.线程是死亡.还是等待新的任务或是继续运行至下一步,就取决于这个程序.虽然初次看来 它可能显得简单,但是,你必须进行一些预警以实现期望的结果.你最好还是牢记以下的几点告诫. 首先,忘掉Th

《Java 7程序设计入门经典》一3.8 for循环中的一些特殊情况

3.8 for循环中的一些特殊情况 因为for循环有很多变化,所以for循环是Java语言中用处最多的语句.一个最常见的用法是有多个循环控制变量.在使用多个循环控制变量时,每个表达式的初始化表达式和迭代表达式用逗号分隔.下面是一个简单的例子: 程序输出如下所示: 注意,逗号将两个初始化表达式和迭代表达式分开的方式.当循环开始时,在循环的初始化部分初始化变量i和变量j.每次循环开始时,递增变量i,递减变量j.当i大于等于j时结束循环.理论上,可以有任意数量的循环控制变量,但实际上,两三个循环控制变

java 循环中的问题

问题描述 在一个for循环中又有while循环,while循环中有break跳转词,请问:break跳出的是整个for循环吗 解决方案 解决方案二:跳出while循环.问这个问题不如自己试一试解决方案三:跳出while解决方案四:在哪个循环里面的break就跳出哪个循环,这是很严谨的,不会有问题.你可以试着加几个print看看.解决方案五:break只跳出一层循环解决方案六:只跳出一层循环解决方案七:不是,break是跳出当前循环,跳出的是while循环.解决方案八:肯定是while循环咯解决方

java怎么在循环时在抛出异常的同时又能跳到循环的下一条

问题描述 java怎么在循环时在抛出异常的同时又能跳到循环的下一条 如题:比如 for(int i=0;i<str.length();i++){ if(i==1){ throw new ApiException("dsf"); //continue; } } 解决方案 看你的目标. 1.查看异常信息.你可以捕获异常,写日志. 2.方法调用的地方处理异常.用list把异常信息存储起来,return. 解决方案二: try { } catch (Exception e) { // T

Java线程中断的本质深入理解

    Java的中断是一种协作机制.也就是说调用线程对象的interrupt方法并不一定就中断了正在运行的线程,它只是要求线程自己在合适的时机中断自己. 一.Java中断的现象 首先,看看Thread类里的几个方法:  public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况

java在一个主线程中开了很多小线程,当主程异常后,希望能关闭这些服务用的小线程,以免冲突。该怎么做

问题描述 java在一个主线程中开了很多小线程,当主程异常后,希望能关闭这些服务用的小线程,以免冲突.该怎么做 我是这样写的: thread mainThread(){ while(true){ init; try{ new serverThread1; ... new serverThread2; ... ... }catch(e){ ... if(flag_exit)break; ... } } } 通常,这个主线程会经常遇问题,所以会抛出异常,因为有while(true),它会从头开始运行

Java线程中断的本质深入理解(转)

  一.Java中断的现象 首先,看看Thread类里的几个方法: public static boolean interrupted 测试当前线程是否已经中断.线程的中断状态 由该方法清除.换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外). public boolean isInterrupted() 测试线程是否已经中断.线程的中断状态 不受该方法的影响. public void