0

我正在从不同的 Windows 服务器获取 directoreis 和文件的总字节数,但不确定我是否需要在这 2 种方法中使用 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
    { }
}
4

2 回答 2

2

我认为您不需要在这些函数内部,因为它们较低(假设客户端足够聪明,可以做出这些负责任的决定)。但是您可能会考虑在调用这些函数的更高级别上执行此操作。

例如 。. .

File data, destination;

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


// and. . .

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

. . . 但这取决于你

于 2012-12-25T01:15:00.197 回答
1

你有几个选择。

1) 捕获和处理(需要在这个低级别进行日志记录)。

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

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

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

3) 作为 RuntimeException 捕获并重新抛出。

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

相反,您可以将这个“不可恢复”作为 RuntimeException 重新抛出并在非常高的级别捕获它,然后弹出一个对话框并崩溃。

4) 抛出普通的 IO 异常并将问题向上传递。

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

于 2012-12-25T01:42:44.080 回答