我有一个包含要打开和解析的文件列表的向量,我想知道在我的情况下做什么是最好的选择。
这就是我开始做的事情:
for (int i =0 ; i< files.size() ; i++)
{
System.out.println("n°" + i + " : " + files.elementAt(i));
try
{
// open the files
}
catch (Exception e) {
// TODO: handle exception
}
}
或者你对这个怎么看?
try
{
for (int i =0 ; i< files.size() ; i++)
{
System.out.println("n°" + i + " : " + files.elementAt(i));
// open the files
}
}
catch (Exception e) {
// TODO: handle exception
}
由于
EDIT:
My purpose is that, when I try to open a file that doesn't exist I must throw something or maybe write the exception in a log file and continu opening the other files.
->
所以我认为第一个解决方案是我的最佳解决方案?
答案 0 :(得分:3)
我会选择第一个 - 例如,如果文件7已损坏,您仍然可以从8-10(或其他)获取数据。即使他们都腐败了,你也不会失去任何东西。
我想这将归结为您的应用程序应该如何工作。如果一个文件出错将使整个过程停止,第二个更合适,但通常我发现第一个文件更有用。
答案 1 :(得分:2)
我认为第一个更好,它的优点是如果一个文件中有异常,你仍然会解析其他文件。
根据你的编辑 - 第二个选项不合适,它会在抛出异常时退出循环。
答案 2 :(得分:0)
不一样!
在第一种情况下,如果捕获异常,则会有下一次迭代。在第二种情况下,如果您遇到异常,则没有下一次迭代!
答案 3 :(得分:0)
这一切都取决于你想要达到的目标。 如果您想尝试所有文件,您应该选择第一个选项。 如果你想在单个错误的情况下停止,那么秒是更好的选择。
答案 4 :(得分:0)
第二个将避免多次进入和离开try / catch的开销,但行为与第一个不同。如果您对一个文件有错误,第一种情况将允许仍然尝试其余文件;在第二种情况下,所有进一步的处理都结束了。
您使用哪种方法应完全基于您想要的这些行为。
答案 5 :(得分:0)
小心:那些不等同!如果其中一个文件失败,第一个表单(在循环体中使用try / catch)将允许处理其他文件,而第二个表单将放弃其他文件。
首先关注您需要的功能。
之后... try / catch会产生轻微的开销,所以第二种形式会更快一点,但是如果早期的文件失败,则会导致无法打开剩余文件的成本。
答案 6 :(得分:0)
这完全取决于你想做什么。当你在10号文件中排除故障时,这两种选择的行为完全不同。在第一个例子中,它将继续使用文件6,7,8 ......
在第二个例子中,它只会继续,直到文件失败,之后它就会放弃。如果你知道你想要的行为,你也知道选择哪一个。
答案 7 :(得分:0)
选项1:
这将尝试打开每个文件,即使一个(或多个)导致异常。
选项2:
如果任何单个文件导致异常,这将停止尝试打开文件。
如果您认为如果一个文件失败,则全部失败 - 使用第一个选项,或者如果所有文件都是正确操作所必需的 - 请使用第一个选项,但如果您想要加载尽可能多的文件 - 请使用第二个选项。