它需要一个try catch块吗?

时间:2012-12-25 01:07:51

标签: java

我从不同的Windows服务器获取目录和文件的总字节数,但不确定我是否需要在这两种方法中使用try catch块?请帮忙

private void retrieveTotalBytes(File sourceFile)
{
    File[] files = sourceFile.listFiles();
    for(File file : files)
    {
        if(file.isDirectory()) 
            retrieveTotalBytes(file);
        else totalBytes += file.length();
    }
}

private void copyFiles(File sourceFile, File targetFile) throws IOException
{
    if(sourceFile.isDirectory())
    {
        if(!targetFile.exists()) targetFile.mkdirs();

        String[] filePaths = sourceFile.list();
        for(String filePath : filePaths)
        {                                 
            File srcFile = new File(sourceFile, filePath);
            File destFile = new File(targetFile, filePath);

            copyFiles(srcFile, destFile);
        }
    }
    else
    { }
}

2 个答案:

答案 0 :(得分:2)

我认为你不需要在这些功能中使用它们(因为它们较低(假设客户端足够聪明,可以做出这些负责任的决定)。但你可能会考虑在更高级别上调用这些函数。

例如,

。 。 。

File data, destination;

try { copyFiles(data, destination); }
catch (IOException e) { . . . }


// and. . .

try { retrieveTotalBytes(data); }
catch (Exception e) { . . . };

。 。 。但这取决于你

答案 1 :(得分:1)

您有多种选择。

1)捕获和处理(需要在此低级别进行记录)。

如果错误与代码的操作无关(这可能不是),这只是一个真正的解决方案。

2)捕获并重新抛出特定于应用程序的异常。

这允许您在'ApplicationException'树中构建异常并将其与其他异常一起捕获。

3)捕获并重新抛出RuntimeException。

由于您可能已经进行了所有检查以确保文件可读,目录是可管理的,因此没有实际原因可以抛出错误。如果确实扔了一个,你可能无法从中恢复。如果你不能,你最终会在堆栈中抛出'IOException',这是愚蠢的。

相反,您可以将此“不可恢复的”重新抛出为RuntimeException,并将其捕获到一个非常高的级别,丢弃一个对话框并崩溃。

4)抛出普通IO异常并将问题传递给链。

这不能解决问题,它只是将它移动到你的应用程序中(并允许IOException渗入你的代码库)。