Java 需要试一试吗

Java 需要试一试吗,java,Java,我正在从不同的Windows服务器获取directoreis和文件的总字节数,但不确定是否需要在这2个方法中使用try-catch块?请帮忙 private void retrieveTotalBytes(File sourceFile) { File[] files = sourceFile.listFiles(); for(File file : files) { if(file.isDirectory()) retrieve

我正在从不同的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
    { }
}

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

例如

File data, destination;

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


// and. . .

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

。但这取决于您

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

例如

File data, destination;

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


// and. . .

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

。但这取决于你

你有几个选择

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

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

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

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

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

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

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

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


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

您有多种选择

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

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

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

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

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

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

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

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


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

我看不出有任何理由关闭它question@PreetSangha,同意。这是一个合理的问题。。。你说的“需要”是什么意思?为了让代码编译?或者为了美观?从某种意义上说,我从不同的windows服务器获取文件时,是否必须使用try catch?这怎么会属于“不是一个真正的问题?”我看不出有任何理由关闭它question@PreetSangha,同意。这是一个合理的问题。。。你说的“需要”是什么意思?为了让代码编译?或者为了美观?从某种意义上说,我从不同的windows服务器获取文件时,是否必须使用try-catch?这怎么会属于“不是一个真正的问题”