[av_slideshow_full size=’featured’ min_height=’0px’ stretch=» animation=’slide’ conditional_play=» autoplay=’false’ interval=’5′ control_layout=’av-control-default’ src=» attachment=» attachment_size=» position=’top left’ repeat=’no-repeat’ attach=’scroll’ av_uid=’av-39e3gh’]
[av_slide_full av-small-font-size-title=» av-mini-font-size-title=» av-medium-font-size=» av-small-font-size=» av-mini-font-size=» slide_type=’image’ id=’2853′ video=’http://’ mobile_image=» fallback_link=’http://’ video_format=» video_ratio=’16:9′ title=» custom_title_size=» custom_content_size=» caption_pos=’caption_bottom’ link_apply=» link=’lightbox’ link_target=» button_label=’Click me’ button_color=’light’ link1=’manually,http://’ link_target1=» button_label2=’Click me’ button_color2=’light’ link2=’manually,http://’ link_target2=» font_color=» custom_title=» custom_content=» overlay_opacity=’0.5′ overlay_color=» overlay_pattern=» overlay_custom_pattern=» av-medium-font-size-title=» video_controls=» video_mute=» video_loop=» video_autoplay=» overlay_enable=» av_uid=’av-beapu’][/av_slide_full]
[/av_slideshow_full]
[av_section min_height=» min_height_px=’500px’ padding=’default’ shadow=’no-border-styling’ bottom_border=’no-border-styling’ bottom_border_diagonal_color=’#333333′ bottom_border_diagonal_direction=’scroll’ bottom_border_style=’scroll’ margin=» custom_margin=’0px’ scroll_down=» custom_arrow_bg=» id=» color=’main_color’ background=’bg_color’ custom_bg=» background_gradient_color1=» background_gradient_color2=» background_gradient_direction=’vertical’ src=» attach=’scroll’ position=’top left’ repeat=’no-repeat’ video=» video_ratio=’16:9′ video_mobile_disabled=» overlay_enable=» overlay_opacity=’0.5′ overlay_color=» overlay_pattern=» overlay_custom_pattern=» av-desktop-hide=» av-medium-hide=» av-small-hide=» av-mini-hide=» av_element_hidden_in_editor=’0′ av_uid=’av-4knp1y’]
[av_one_full first min_height=» vertical_alignment=» space=» custom_margin=» margin=’0px’ row_boxshadow=» row_boxshadow_color=» row_boxshadow_width=’10’ link=» linktarget=» link_hover=» padding=’0px’ highlight=» highlight_size=» border=» border_color=» radius=’0px’ column_boxshadow=» column_boxshadow_color=» column_boxshadow_width=’10’ background=’bg_color’ background_color=» background_gradient_color1=» background_gradient_color2=» background_gradient_direction=’vertical’ src=» background_position=’top left’ background_repeat=’no-repeat’ animation=» mobile_breaking=» mobile_display=» av_uid=’av-27wfdi’]
[av_textblock size=’40’ font_color=’custom’ color=’#3d3d3d’ av-medium-font-size=» av-small-font-size=» av-mini-font-size=» av_uid=’av-7kt8s5′ admin_preview_bg=»]
Java NIO.2 a través de ejemplos
[/av_textblock]
[av_textblock size=’16’ font_color=’custom’ color=’#5a5a5a’ av-medium-font-size=» av-small-font-size=» av-mini-font-size=» av_uid=’av-kaz2hsfi’ admin_preview_bg=»]
En la versión 7 de Java se introdujo el paquete java.nio.file, el cual supuso una importante mejora respecto al antiguo manejo de ficheros vía IO. Operaciones aparentemente tan sencillas como leer/escribir un archivo de texto en/desde un String suponían la escritura de varias líneas de código. De hecho, una librería prácticamente obligatoria cuando se tenía que hacer un uso importante de ficheros era Commons IO.
Se mostrarán a continuación varios ejemplos típicos de uso, donde se verá la potencia y sencillez de este paquete.
Crea un fichero vacío si aún no existe
Path emptyFile = Paths.get("/examples/emptyFile.txt"); if (Files.notExists(emptyFile)) { emptyFile = Files.createFile(Paths.get("/examples/emptyFile.txt")); }
Lee el contenido de un fichero de texto a una cadena
String content = new String(Files.readAllBytes(Paths.get("/examples/sampleText.txt")), StandardCharsets.UTF_8); System.out.println(content);
Lee el contenido de un fichero de texto línea a línea
List<String> lines = Files.readAllLines(Paths.get("/examples/sampleText.txt"), StandardCharsets.UTF_8); for (String line : lines) { System.out.println(line); }
Escribe un String a un fichero de texto, sobreescribiéndolo si ya existiera
String text = "Esto es una cadena de prueba"; Files.write(Paths.get("/examples/writeText.txt"), text.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
Escribe una lista de String a un fichero de texto, sobreescribiéndolo si ya existiera
List<String> textLines = Arrays.asList("Línea 1", "Línea 2", "Línea 3"); Files.write(Paths.get("/examples/writeLines.txt"), textLines, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
Crear una estructura de directorios de forma recursiva. Si algún directorio ya existiera no lanzará excepción
Files.createDirectories(Paths.get("/examples/level1/level2/level3"));
Tamaño en bytes de un directorio
long size = Files.walk(Paths.get("/examples")).parallel().filter(p -> p.toFile().isFile()) .mapToLong(p -> p.toFile().length()).sum(); System.out.println("Tamaño del directorio: " + size);
Cuenta el número de ficheros de un directorio de forma recursiva
long count = Files.walk(Paths.get("/examples")).parallel().filter(p -> !p.toFile().isDirectory()).count(); System.out.println("Total de ficheros: " + count);
Cuenta el número de ficheros no vacíos con ciertas extensiones leyendo solo dos niveles a partir del directorio principal
long parcialCount = Files.walk(Paths.get("/examples"), 2).parallel() .filter(p -> p.toString().matches("(?i).+\\.(txt|log|conf)$") && p.toFile().length() > 0L).count(); System.out.println("Ficheros que cumplen con el filtro: " + parcialCount);
Lista recursiva con los directorios contenidos en un directorio padre
List<Path> dirs = Files.walk(Paths.get("/examples")).filter(Files::isDirectory).map(x -> x.toAbsolutePath()) .collect(Collectors.toList()); for (Path dir : dirs) { System.out.println("Ruta del directorio: ".concat(dir.toString())); }
Lista recursiva con los ficheros contenidos en un directorio
List<Path> files = Files.walk(Paths.get("/examples")) .filter(Files::isRegularFile).map(x -> x.toAbsolutePath()).collect(Collectors.toList()); for (Path file : files) { System.out.println("Ruta del fichero: ".concat(file.toString())); }
Limpia el contenido de un directorio borrando de forma recursiva todos los ficheros contenidos en el mismo
Files.walk(Paths.get("/to_be_cleared")).parallel().filter(p -> p.toFile().isFile()).forEach(File::delete);
Borra de forma recursiva un directorio y todo su contenido
Files.walk(Paths.get("/to_be_deleted")).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
Copia un directorio con todo su contenido desde un origen a un destino
Path from = Paths.get("/examples/source_dir"); Path dest = Paths.get("/examples/dest_dir"); try (Stream<Path> stream = Files.walk(from)) { stream.forEachOrdered(source -> { try { Files.copy(source, dest.resolve(from.relativize(source)), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { e.printStackTrace(); } }); }
Mueve un directorio con todo su contenido
Files.move(Paths.get("/examples/source_dir"), Paths.get("/examples/dest_dir"), StandardCopyOption.REPLACE_EXISTING);
Convierte de Path a File y de File a Path
File file = onePath.toFile(); Path path = oneFile.toPath();
Como se ha podido comprobar, el uso de esta nueva API permite navegar, leer y escribir ficheros, consultar sus atributos (fechas de creación, modificación, acceso, permisos…) copiar y mover ficheros o directorios, reconocer enlaces simbólicos, entrada/salida asíncrona y más funcionalidades que nos facilitarán enormemente el trabajo con ficheros y directorios sin falta de importar librerías externas.
[/av_textblock]
[/av_one_full][av_hr class=’invisible’ height=’20’ shadow=’no-shadow’ position=’center’ custom_border=’av-border-thin’ custom_width=’50px’ custom_border_color=» custom_margin_top=’30px’ custom_margin_bottom=’30px’ icon_select=’yes’ custom_icon_color=» icon=’ue808′ font=’entypo-fontello’ av_uid=’av-kblb1oxk’ admin_preview_bg=»]
[av_textblock size=’40’ font_color=’custom’ color=’#bcbcbc’ av-medium-font-size=» av-small-font-size=» av-mini-font-size=» av_uid=’av-7kt8s5′ admin_preview_bg=»]
VIERNES 21 DE AGOSTO DE 2020
[/av_textblock]
[/av_section][av_section min_height=» min_height_px=’0px’ padding=’small’ shadow=’no-border-styling’ bottom_border=’no-border-styling’ bottom_border_diagonal_color=’#333333′ bottom_border_diagonal_direction=» bottom_border_style=» custom_margin=’0px’ custom_margin_sync=’true’ custom_arrow_bg=» id=» color=’main_color’ background=’bg_color’ custom_bg=’#ffffff’ background_gradient_color1=» background_gradient_color2=» background_gradient_direction=’vertical’ src=» attachment=» attachment_size=» attach=’fixed’ position=’bottom left’ repeat=’stretch’ video=» video_ratio=’16:9′ overlay_opacity=’0.5′ overlay_color=» overlay_pattern=» overlay_custom_pattern=» av_element_hidden_in_editor=’0′ av_uid=’av-6j93b9′]
[av_one_third first min_height=» vertical_alignment=» space=» custom_margin=» margin=’0px’ padding=’0px’ border=» border_color=» radius=’0px’ background_color=» src=» background_position=’top left’ background_repeat=’no-repeat’ animation=» mobile_display=» av_uid=’av-64y9d1′]
[/av_one_third][av_one_third min_height=» vertical_alignment=» space=» custom_margin=» margin=’0px’ padding=’0px’ border=» border_color=» radius=’0px’ background_color=» src=» background_position=’top left’ background_repeat=’no-repeat’ animation=» mobile_display=» av_uid=’av-64y9d1′]
[av_social_share title=’Compartir esta entrada’ style=» buttons=» av_uid=’av-kazgyg9i’ admin_preview_bg=»]
[/av_one_third][av_one_third min_height=» vertical_alignment=» space=» custom_margin=» margin=’0px’ padding=’0px’ border=» border_color=» radius=’0px’ background_color=» src=» background_position=’top left’ background_repeat=’no-repeat’ animation=» mobile_display=» av_uid=’av-64y9d1′]
[/av_one_third]
[/av_section]