我从不同的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
{ }
}
答案 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渗入你的代码库)。