Archivos y compresión · jdashboardUI · B4J · StaticCode · JavaFX FileChooser
FileChooserUtils centraliza el código repetitivo de JavaFX necesario para configurar objetos FileChooser.ExtensionFilter usando listas normales de B4J.
Es útil cuando una aplicación abre o guarda documentos, imágenes, backups ZIP, proyectos u otros formatos conocidos.
Qué permite hacer
- Agregar un filtro de extensión por cada descripción.
- Agregar un filtro combinado tipo "Archivos compatibles".
- Agregar opcionalmente
All Files. - Combinar filtro general + filtros individuales + All Files.
- Seleccionar el filtro inicial por su descripción.
Regla importante: las listas deben tener el mismo tamaño
Todos los métodos Add esperan que Descriptions.Size = Filters.Size.
Dim Descriptions As List
Descriptions.Initialize2(Array As String( _
"Archivos ZIP", _
"Documentos PDF", _
"Archivos de texto"))
Dim Filters As List
Filters.Initialize2(Array As String( _
"*.zip", _
"*.pdf", _
"*.txt"))
Si los tamaños son diferentes, la implementación actual escribe Extension filters not added en el Log y termina sin modificar el FileChooser.
AddExtensionFilters
Agrega solamente los filtros individuales.
Dim FC As FileChooser
FC.Initialize
FC.Title = "Abrir documento"
Dim Descriptions As List
Descriptions.Initialize2(Array As String("Documentos PDF", "Archivos de texto"))
Dim Filters As List
Filters.Initialize2(Array As String("*.pdf", "*.txt"))
FileChooserUtils.AddExtensionFilters(FC, Descriptions, Filters)
Dim Selected As String = FC.ShowOpen(MainForm)
If Selected <> "" Then Log(Selected)
AddExtensionFilters2
Agrega primero un filtro combinado y después todos los filtros individuales.
FileChooserUtils.AddExtensionFilters2( _
FC, Descriptions, Filters, "Archivos compatibles")
Por ejemplo, *.pdf, *.txt y *.zip pueden aparecer juntos bajo Archivos compatibles y seguir disponibles como filtros individuales.
AddExtensionFilters3
Agrega los filtros individuales y opcionalmente la entrada JavaFX All Files (*.*).
FileChooserUtils.AddExtensionFilters3( _
FC, Descriptions, Filters, True)
Usa False cuando no quieras permitir una selección sin restricciones.
AddExtensionFilters4
Es el helper completo utilizado internamente por los demás métodos Add.
FileChooserUtils.AddExtensionFilters4( _
FC, _
Descriptions, _
Filters, _
True, _
"Archivos compatibles", _
True)
| Parámetro | Significado |
|---|---|
FC |
FileChooser que se configurará |
Descriptions |
Nombres visibles para el usuario |
Filters |
Patrones JavaFX como *.zip |
Merge |
Crea un filtro combinado si es True |
MergeName |
Nombre visible del filtro combinado |
AllFiles |
Agrega All Files (*.*) si es True |
Seleccionar el filtro predeterminado
SetSelectedExtensionFilter selecciona el primer filtro existente cuya descripción coincida exactamente con el texto indicado.
FileChooserUtils.SetSelectedExtensionFilter(FC, "Archivos ZIP")
Para un filtro combinado:
FileChooserUtils.SetSelectedExtensionFilter(FC, "Archivos compatibles")
Para el filtro sin restricciones:
FileChooserUtils.SetSelectedExtensionFilter(FC, "All Files")
La comparación se realiza contra la descripción, no contra el patrón de extensión.
Ejemplo completo: elegir dónde guardar un backup
Private Sub ChooseBackupFile As String
Dim FC As FileChooser
FC.Initialize
FC.Title = "Guardar backup"
Dim Descriptions As List
Descriptions.Initialize2(Array As String("Archivos ZIP"))
Dim Filters As List
Filters.Initialize2(Array As String("*.zip"))
FileChooserUtils.AddExtensionFilters3( _
FC, Descriptions, Filters, True)
FileChooserUtils.SetSelectedExtensionFilter( _
FC, "Archivos ZIP")
Return FC.ShowSave(MainForm)
End Sub
Private Sub CreateBackup
Dim Target As String = ChooseBackupFile
If Target = "" Then Return
' Los filtros no agregan automáticamente la extensión.
If Target.ToLowerCase.EndsWith(".zip") = False Then
Target = Target & ".zip"
End If
Dim Zip As ZipFile
Zip.Initialize(Target)
Zip.SmartCompression = True
If Zip.AddFolderSmart(File.Combine(File.DirApp, "data")) = False Then
Log(Zip.LastError)
Return
End If
If Zip.ValidateArchive Then
Log("Backup creado: " & Target)
Else
Log("Backup inválido: " & Zip.LastError)
End If
End Sub
Aquí FileChooserUtils mejora la experiencia de selección y ZipFile se ocupa del archivo ZIP.
Comportamiento de la extensión
El helper controla qué archivos se muestran en el selector. No agrega automáticamente una extensión que falte en una ruta devuelta por ShowSave.
If Path.ToLowerCase.EndsWith(".zip") = False Then
Path = Path & ".zip"
End If
Módulos relacionados de jdashboardUI
- FileUtils — copia/eliminación recursiva, renombrado, subcarpetas y fechas.
- ZipFile + ZipFileHeader — creación, cifrado, lectura, validación e inspección de ZIP.
Buenas prácticas
- Mantén
DescriptionsyFilterscon el mismo número de elementos. - Usa patrones JavaFX como
*.zip,*.pdfo*.txt. - Usa un
MergeNameclaro. - Ejecuta
SetSelectedExtensionFilterdespués de agregar los filtros. - Recuerda que un filtro de guardado no garantiza ni agrega automáticamente la extensión del nombre.