Los métodos recursivos son eficientes para resolver problemas con estructuras recursivas. Los ejemplos anteriores se pueden resolver fácilmente sin utilizar recursividad. Esta sección presenta un problema que es difícil de resolver sin utilizar la recursividad. El problema es encontrar el tamaño de un directorio. El tamaño de un directorio es la suma de los tamaños de todos los archivos del directorio. Un directorio d puede contener subdirectorios. Supongamos que un directorio contiene archivos f1, f2,..., fm y subdirectorios d1, d2,..., dn, como se muestra en la figura siguiente.
El tamaño del directorio se puede definir de forma recursiva de la siguiente manera:
tamaño(d) = tamaño(f1) tamaño(f2) ... tamaño(fm) tamaño(d1) tamaño(d2) ... tamaño(dn)
La clase Archivo se puede utilizar para representar un archivo o directorio y obtener las propiedades de archivos y directorios. Dos métodos de la clase File son útiles para este problema:
El siguiente código proporciona un programa que solicita al usuario que ingrese un directorio o un archivo y muestra su tamaño.
Si el objeto archivo representa un directorio (línea 20), cada subelemento (archivo o subdirectorio) en el directorio se invoca recursivamente para obtener su tamaño (línea 23). Si el objeto archivo representa un archivo (línea 26), el tamaño del archivo se obtiene y se suma al tamaño total (línea 27).
¿Qué sucede si se ingresa un directorio incorrecto o inexistente? El programa detectará que no es un directorio e invocará file.length() (línea 27), que devuelve 0. Por lo tanto, en este caso, el método getSize devolverá 0.
Para evitar errores, es una buena práctica probar todos los casos. Por ejemplo, debes probar el programa para detectar una entrada de archivo, un directorio vacío, un directorio inexistente y un archivo inexistente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3