Manipulación de Archivos y Carpetas
Introducción
En el código de backend políglota de la plataforma Netuno, podemos manipular cualquier archivo o carpeta.
La manipulación consiste en poder crear, renombrar y eliminar los archivos y carpetas, alterar el contenido de archivos y listar el contenido de carpetas. En general, estas son las operaciones que normalmente necesitamos hacer programáticamente.
En la plataforma Netuno hay recursos de programación low-code que permiten manipular las carpetas y los archivos internos de la aplicación, pero también cualesquiera archivos y carpetas del sistema en general, es decir, fuera de la aplicación.
Es útil cuando necesitamos automatizar algún proceso que necesita tocar algún archivo cualquiera, veamos cómo.
Los recursos de programación políglota low-code que permiten manipular archivos son:
_app- Aplicación_storage- Storage_os- Sistema Operativo
A través de estos recursos tenemos los métodos para:
.file- Archivo existente..folder- Carpeta existente..path- Ruta genérica, tanto puede ser un archivo como una carpeta, que existe o que no existe.
Con estos métodos obtenemos un objeto del tipo File, que proporciona todos los medios para manipulaciones de archivos, carpetas y rutas en general, lo que permite realizar operaciones como:
- Crear archivos y carpetas.
- Borrar archivos y carpetas.
- Listar el contenido de las carpetas.
- Renombrar archivos y carpetas.
- Leer y escribir datos en archivos.
- Eliminar carpetas y sus respectivas subcarpetas y archivos recursivamente.
Aplicación
Para realizar las operaciones principales de manipulación de archivos y carpetas dentro de la estructura de la aplicación,
utilizamos el recurso _app:
Carpetas en la Aplicación
Garantiza que se obtiene una carpeta que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const miCarpeta = _app.folder("mi/carpeta")
const miCarpeta = _app.folder("mi/carpeta")
miCarpeta = _app.folder("mi/carpeta")
miCarpeta = _app.folder("mi/carpeta")
val miCarpeta = _app.folder("mi/carpeta")
final miCarpeta = _app.folder("mi/carpeta")
Archivos en la Aplicación
Garantiza que se obtiene un archivo que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const miArchivo = _app.file("mi/carpeta/archivo.txt")
const miArchivo = _app.file("mi/carpeta/archivo.txt")
miArchivo = _app.file("mi/carpeta/archivo.txt")
miArchivo = _app.file("mi/carpeta/archivo.txt")
val miArchivo = _app.file("mi/carpeta/archivo.txt")
final miArchivo = _app.file("mi/carpeta/archivo.txt")
Rutas en la Aplicación
Obtiene una ruta de archivo o carpeta, independientemente de si existe o no, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
const nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
val nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
final nuevoArchivo = _app.path("mi/carpeta/nuevo-archivo.txt")
Storage
Para realizar las operaciones principales de manipulación de archivos y carpetas dentro de la carpeta 📁 storage de la aplicación,
utilizamos el recurso _storage:
Carpetas en el Storage
Garantiza que se obtiene una carpeta que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// La ruta real de la carpeta será:
// storage/filesystem/server/mi/carpeta
const storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
const miCarpeta = storageMiCarpeta.folder()
// La ruta real de la carpeta será:
// storage/filesystem/server/mi/carpeta
const storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
const miCarpeta = storageMiCarpeta.folder()
# La ruta real de la carpeta será:
# storage/filesystem/server/mi/carpeta
storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
miCarpeta = storageMiCarpeta.folder()
# La ruta real de la carpeta será:
# storage/filesystem/server/mi/carpeta
storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
miCarpeta = storageMiCarpeta.folder()
// La ruta real de la carpeta será:
// storage/filesystem/server/mi/carpeta
val storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
val miCarpeta = storageMiCarpeta.folder()
// La ruta real de la carpeta será:
// storage/filesystem/server/mi/carpeta
final storageMiCarpeta = _storage.filesystem("server", "mi/carpeta")
final miCarpeta = storageMiCarpeta.folder()
Archivos en el Storage
Garantiza que se obtiene un archivo que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// La ruta real del archivo será:
// storage/filesystem/server/mi/carpeta/archivo.txt
const storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
const archivo = storageArchivo.file()
// La ruta real del archivo será:
// storage/filesystem/server/mi/carpeta/archivo.txt
const storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
const archivo = storageArchivo.file()
# La ruta real del archivo será:
# storage/filesystem/server/mi/carpeta/archivo.txt
storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
archivo = storageArchivo.file()
# La ruta real del archivo será:
# storage/filesystem/server/mi/carpeta/archivo.txt
storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
archivo = storageArchivo.file()
// La ruta real del archivo será:
// storage/filesystem/server/mi/carpeta/archivo.txt
val storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
val archivo = storageArchivo.file()
// La ruta real del archivo será:
// storage/filesystem/server/mi/carpeta/archivo.txt
final storageArchivo = _storage.filesystem("server", "mi/carpeta", "archivo.txt")
final archivo = storageArchivo.file()
Rutas en el Storage
Obtiene una ruta de archivo o carpeta, independientemente de si existe o no, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// La ruta real de la nueva carpeta será:
// storage/filesystem/server/mi/nueva-carpeta
const storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
const carpeta = storageCarpeta.path()
// La ruta real del nuevo archivo será:
// storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
const storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
const archivo = storageArchivo.path()
// La ruta real de la nueva carpeta será:
// storage/filesystem/server/mi/nueva-carpeta
const storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
const carpeta = storageCarpeta.path()
// La ruta real del nuevo archivo será:
// storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
const storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
const archivo = storageArchivo.path()
# La ruta real de la nueva carpeta será:
# storage/filesystem/server/mi/nueva-carpeta
storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
carpeta = storageCarpeta.path()
# La ruta real del nuevo archivo será:
# storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
archivo = storageArchivo.path()
# La ruta real de la nueva carpeta será:
# storage/filesystem/server/mi/nueva-carpeta
storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
carpeta = storageCarpeta.path()
# La ruta real del nuevo archivo será:
# storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
archivo = storageArchivo.path()
// La ruta real de la nueva carpeta será:
// storage/filesystem/server/mi/nueva-carpeta
val storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
val carpeta = storageCarpeta.path()
// La ruta real del nuevo archivo será:
// storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
val storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
val archivo = storageArchivo.path()
// La ruta real de la nueva carpeta será:
// storage/filesystem/server/mi/nueva-carpeta
final storageCarpeta = _storage.filesystem("server", "mi/nueva-carpeta")
final carpeta = storageCarpeta.path()
// La ruta real del nuevo archivo será:
// storage/filesystem/server/mi/carpeta/nuevo-archivo.txt
final storageArchivo = _storage.filesystem("server", "mi/carpeta", "nuevo-archivo.txt")
final archivo = storageArchivo.path()
Sistema Operativo
Para realizar las operaciones principales de manipulación de archivos y carpetas en cualquier lugar del sistema operativo,
utilizamos el recurso _os:
Carpetas en el Sistema Operativo
Garantiza que se obtiene una carpeta que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const miCarpeta = _os.folder("/tmp/mi/carpeta")
const miCarpeta = _os.folder("/tmp/mi/carpeta")
miCarpeta = _os.folder("/tmp/mi/carpeta")
miCarpeta = _os.folder("/tmp/mi/carpeta")
val miCarpeta = _os.folder("/tmp/mi/carpeta")
final miCarpeta = _os.folder("/tmp/mi/carpeta")
Archivos en el Sistema Operativo
Garantiza que se obtiene un archivo que existe, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
const miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
val miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
final miArchivo = _os.file("/tmp/mi/carpeta/archivo.txt")
Rutas en el Sistema Operativo
Obtiene una ruta de archivo o carpeta, independientemente de si existe o no, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
const nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
val nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
final nuevoArchivo = _os.path("/tmp/mi/carpeta/nuevo-archivo.txt")
Crear Carpetas
El método mkdir crea una carpeta.
En el ejemplo siguiente se crea la carpeta específica en la raíz de la aplicación:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const carpeta = _app.path("temp")
carpeta.mkdir()
const carpeta = _app.path("temp")
carpeta.mkdir()
carpeta = _app.path("temp")
carpeta.mkdir()
carpeta = _app.path("temp")
carpeta.mkdir()
val carpeta = _app.path("temp")
carpeta.mkdir()
final carpeta = _app.path("temp")
carpeta.mkdir()
Para crear una subcarpeta dentro de la carpeta existente, indique la ruta completa separando la jerarquía de
carpetas con /:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
const subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
val subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
final subcarpeta = _app.path("temp/otra")
subcarpeta.mkdir()
En cambio, mkdirs crea las carpetas anteriores y/o las subcarpetas en caso de que no existan, por lo que permite crear una estructura
de carpetas en la aplicación, por ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
const rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
val rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
final rutaCarpetas = _app.path("temp/a/b/c")
rutaCarpetas.mkdirs()
El recurso _storage tiene el método ensurePath que verifica si la
ruta existe, en caso de que no exista, la crea:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
// Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
const archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
// Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
# Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
# Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
val archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
// Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
final archivo = _storage.filesystem(
"public",
"temp/subcarpeta",
"archivo.txt"
)
// Crea la estructura de carpetas en caso de que no exista:
archivo.ensurePath()
Por lo tanto, ensurePath garantiza que la estructura de carpetas exista.
Eliminar Archivos y Carpetas
Con el método delete podemos tanto eliminar carpetas como archivos, teniendo en cuenta que las carpetas deben estar vacías,
vea el ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Elimina una carpeta vacía:
const carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
// Elimina un archivo:
const archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
// Elimina una ruta, carpeta vacía o archivo:
const ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
// Elimina una carpeta vacía:
const carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
// Elimina un archivo:
const archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
// Elimina una ruta, carpeta vacía o archivo:
const ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
# Elimina una carpeta vacía:
carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
# Elimina un archivo:
archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
# Elimina una ruta, carpeta vacía o archivo:
ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
# Elimina una carpeta vacía:
carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
# Elimina un archivo:
archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
# Elimina una ruta, carpeta vacía o archivo:
ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
// Elimina una carpeta vacía:
val carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
// Elimina un archivo:
val archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
// Elimina una ruta, carpeta vacía o archivo:
val ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
// Elimina una carpeta vacía:
final carpetaVacia = _app.folder("carpeta/vacia")
carpetaVacia.delete()
// Elimina un archivo:
final archivo = _app.file("carpeta/archivo.txt")
archivo.delete()
// Elimina una ruta, carpeta vacía o archivo:
final ruta = _app.path("carpeta1/archivo-o-carpeta-vacia")
ruta.delete()
Con deleteAll permite eliminar todo, es decir, todos los archivos, carpetas y subcarpetas recursivamente:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Elimina la carpeta y todo el contenido recursivamente:
const carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
// Elimina la ruta de una carpeta y todo su contenido interno,
// incluyendo subcarpetas y archivos:
const ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
// Elimina la carpeta y todo el contenido recursivamente:
const carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
// Elimina la ruta de una carpeta y todo su contenido interno,
// incluyendo subcarpetas y archivos:
const ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
# Elimina la carpeta y todo el contenido recursivamente:
carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
# Elimina la ruta de una carpeta y todo su contenido interno,
# incluyendo subcarpetas y archivos:
ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
# Elimina la carpeta y todo el contenido recursivamente:
carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
# Elimina la ruta de una carpeta y todo su contenido interno,
# incluyendo subcarpetas y archivos:
ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
// Elimina la carpeta y todo el contenido recursivamente:
val carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
// Elimina la ruta de una carpeta y todo su contenido interno,
// incluyendo subcarpetas y archivos:
val ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
// Elimina la carpeta y todo el contenido recursivamente:
final carpetaVacia = _app.folder("carpeta/ejemplo")
carpetaVacia.deleteAll()
// Elimina la ruta de una carpeta y todo su contenido interno,
// incluyendo subcarpetas y archivos:
final ruta = _app.path("ruta/carpeta")
ruta.deleteAll()
Para eliminar solo los archivos dentro de la carpeta y no borrar nada en las subcarpetas, tenemos deleteFiles, que permite
recibir una extensión en caso de que se quiera eliminar solo archivos con una extensión específica:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Elimina los archivos solo dentro de la carpeta:
const carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
// Elimina los archivos con la extensión JPG solo dentro de la carpeta:
const ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
// Elimina los archivos solo dentro de la carpeta:
const carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
// Elimina los archivos con la extensión JPG solo dentro de la carpeta:
const ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
# Elimina los archivos solo dentro de la carpeta:
carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
# Elimina los archivos con la extensión JPG solo dentro de la carpeta:
ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
# Elimina los archivos solo dentro de la carpeta:
carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
# Elimina los archivos con la extensión JPG solo dentro de la carpeta:
ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
// Elimina los archivos solo dentro de la carpeta:
val carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
// Elimina los archivos con la extensión JPG solo dentro de la carpeta:
val ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
// Elimina los archivos solo dentro de la carpeta:
final carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteFiles()
// Elimina los archivos con la extensión JPG solo dentro de la carpeta:
final ruta = _app.path("ruta/carpeta")
ruta.deleteFiles("jpg")
Para eliminar solo los archivos recursivamente y mantener la estructura de carpetas, tenemos deleteAllFiles, que
también permite recibir una extensión en caso de que se quiera eliminar solo un tipo de archivo específico, vea estos dos
ejemplos:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Elimina todos los archivos dentro de la carpeta y subcarpetas:
const carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
// Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
const ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
// Elimina todos los archivos dentro de la carpeta y subcarpetas:
const carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
// Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
const ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
# Elimina todos los archivos dentro de la carpeta y subcarpetas:
carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
# Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
# Elimina todos los archivos dentro de la carpeta y subcarpetas:
carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
# Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
// Elimina todos los archivos dentro de la carpeta y subcarpetas:
val carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
// Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
val ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
// Elimina todos los archivos dentro de la carpeta y subcarpetas:
final carpeta = _app.folder("carpeta/ejemplo")
carpeta.deleteAllFiles()
// Elimina todos los archivos con la extensión JPG dentro de la carpeta y subcarpetas:
final ruta = _app.path("ruta/carpeta")
ruta.deleteAllFiles("jpg")
Renombrar o Mover
Para mover una carpeta, es lo mismo que renombrarla:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
const carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
val carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
final carpeta = _app.folder("temp")
carpeta.renameTo("prueba")
Para renombrar una carpeta y cambiarla de nivel en la jerarquía de carpetas, es lo mismo que mover la carpeta:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
const carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
val carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
final carpeta = _app.folder("temp/a/b")
carpeta.renameTo("prueba/z")
Y para mover una subcarpeta sin cambiar su nombre, basta con indicar la nueva ruta en el método renameTo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
const carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
val carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
final carpeta = _app.folder("prueba/otra")
carpeta.renameTo("otra")
Guardar Contenidos en Archivos
La generación de contenidos en archivos se hace a través del método output que proporciona un objeto del tipo
OutputStream.
Para escribir los datos en el output utilizamos el método printAndClose,
que imprime el contenido en el archivo y cierra el archivo guardando el contenido.
Escribir Archivo de Texto
Vea el ejemplo de cómo crear un archivo con contenido de texto:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("temp").mkdir()
const escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
_app.path("temp").mkdir()
const escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
_app.path("temp").mkdir()
escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
_app.path("temp").mkdir()
escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
_app.path("temp").mkdir()
val escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
_app.path("temp").mkdir()
final escritura = _app.path("temp/archivo.txt").output()
escritura.printAndClose("Mi texto aquí...")
Siempre que utilizamos el
outputse genera un nuevo archivo, por lo tanto, si se ejecuta el código nuevamente el archivo se volverá a crear.
Escribir archivo JSON
Vea cómo podemos guardar datos JSON en archivos:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("temp").mkdir()
const escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
const escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
val escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
final escritura = _app.path("temp/cliente.json").output()
escritura.printAndClose(
_val.map()
.set("nombre", "María Joaquina")
.set(
"registros",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
Para generar el JSON indentado, es decir, formateado en varias líneas y tabulado, podemos pasar el número de espacios
con el que se hará la tabulación, por ejemplo .toJSON(4).
Más detalles sobre el método toJSON en Values.
Leer Contenidos en Archivos
La obtención de contenidos en archivos se hace a través del método input que proporciona un objeto del tipo
InputStream.
Para leer los datos en el input utilizamos el método readAllAndClose,
que procesa la lectura del contenido en el archivo y cierra el archivo.
Leer Archivo de Texto
Vea el ejemplo de cómo leer un archivo y obtener el contenido de texto:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const archivo = _app.file("temp/archivo.txt")
const lectura = archivo.input()
_log.info(lectura.readAllAndClose())
const archivo = _app.file("temp/archivo.txt")
const lectura = archivo.input()
_log.info(lectura.readAllAndClose())
archivo = _app.file("temp/archivo.txt")
lectura = archivo.input()
_log.info(lectura.readAllAndClose())
archivo = _app.file("temp/archivo.txt")
lectura = archivo.input()
_log.info(lectura.readAllAndClose())
val archivo = _app.file("temp/archivo.txt")
val lectura = archivo.input()
_log.info(lectura.readAllAndClose())
final archivo = _app.file("temp/archivo.txt")
final lectura = archivo.input()
_log.info(lectura.readAllAndClose())
Leer archivo JSON
Vea cómo podemos procesar datos JSON obtenidos en archivos:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const archivo = _app.file("temp/archivo.txt")
const lectura = archivo.input()
const datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
const archivo = _app.file("temp/archivo.txt")
const lectura = archivo.input()
const datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
archivo = _app.file("temp/archivo.txt")
lectura = archivo.input()
datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
archivo = _app.file("temp/archivo.txt")
lectura = archivo.input()
datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
val archivo = _app.file("temp/archivo.txt")
val lectura = archivo.input()
val datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
final archivo = _app.file("temp/archivo.txt")
final lectura = archivo.input()
final datos = _val.fromJSON(lectura.readAllAndClose())
_log.info("Datos del Archivo:", datos)
Más detalles sobre el método fromJSON del recurso Val.
Particularidades del Storage
El recurso storage tiene algunos métodos para utilización directa.
Por ejemplo, podemos acceder a través del storage:
Esto quiere decir que no necesitamos obtener el file o path para trabajar con el input o output.
Escribir Archivo de Texto en el Storage
Al iniciar un storage para un archivo podemos realizar la escritura utilizando el método output, que obtiene una instancia del objeto OutputStream que permite procesar y leer los datos.
Entonces, con el OutputStream, el método printAndClose,
hace la escritura de texto (string) en el archivo y lo cierra.
Vea este ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
const txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
val txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
final txt = _storage.filesystem("server", "temp", "archivo.txt")
txt.ensurePath()
txt.output().printAndClose("Mi texto aquí...")
Leer Archivo de Texto en el Storage
Al iniciar un storage para un archivo podemos realizar la lectura utilizando el método input, que obtiene una instancia del objeto InputStream que permite procesar y leer los datos.
Entonces, con el InputStream, el método readAllAndClose,
hace la lectura de todo el archivo y lo cierra, retornando los datos como texto (string).
Vea este ejemplo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
const txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
val txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
final txt = _storage.filesystem("server", "temp", "archivo.txt")
_log.info(txt.input().readAllAndClose())
Crear archivo aleatorio en el Storage
El recurso _storage permite generar nombres de archivos aleatorios con el método newRandomFile.
Se debe iniciar un storage para la ruta de una carpeta, y al ejecutar el método newRandomFile se pasa la extensión del
archivo pretendido.
El método retorna una nueva instancia del storage para el archivo aleatorio generado automáticamente para ser utilizado en la carpeta inicial.
Vea cómo generar un archivo con extensión TXT con nombre aleatorio:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const carpeta = _storage.filesystem("server", "temp")
const archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
const carpeta = _storage.filesystem("server", "temp")
const archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
carpeta = _storage.filesystem("server", "temp")
archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
carpeta = _storage.filesystem("server", "temp")
archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
val carpeta = _storage.filesystem("server", "temp")
val archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
final carpeta = _storage.filesystem("server", "temp")
final archivo = carpeta.newRandomFile("txt")
archivo.output().printAndClose("Mi texto aquí...")
Conclusión
Con el framework low-code políglota de Netuno podemos realizar todas las principales operaciones de carpetas y archivos directamente.
Al utilizar los recursos específicos para manipular archivos y carpetas en la:
_app- Aplicación_storage- Storage de la Aplicación_os- Sistema Operativo
Por cuestiones de buenas prácticas y organización debemos priorizar la utilización del storage, las excepciones deben ser solo casos puntuales y estrictamente necesarios.
Netuno procesa el cierre automático de los inputs y outputs al final del procesamiento de los servicios, pero por buenas prácticas debemos intentar cerrarlos siempre.