Manipulacja plikami i folderami
Wprowadzenie
W wielojęzycznym kodzie backendu platformy Netuno możemy manipulować dowolnym plikiem lub folderem.
Manipulacja polega na możliwości tworzenia, zmieniania nazw i usuwania plików oraz folderów, zmieniania zawartości plików i listowania zawartości folderów. Ogólnie są to operacje, które zwykle musimy wykonywać programowo.
W platformie Netuno dostępne są zasoby programowania low-code, które pozwalają manipulować folderami i plikami wewnętrznymi aplikacji, a także dowolnymi plikami i folderami systemu ogólnie, czyli poza aplikacją.
Jest to przydatne, gdy musimy zautomatyzować proces, który wymaga ingerencji w dowolny plik; zobaczmy jak.
Zasoby programowania wielojęzycznego low-code, które pozwalają manipulować plikami, to:
_app- Aplikacja_storage- Storage_os- System operacyjny
Za pomocą tych zasobów mamy metody do:
.file- Istniejący plik..folder- Istniejący folder..path- Ogólna ścieżka; może być plikiem lub folderem, istniejącym lub nieistniejącym.
Dzięki tym metodom otrzymujemy obiekt typu File, który zapewnia wszystkie możliwości manipulacji plikami, folderami i ścieżkami ogólnie, co pozwala wykonywać operacje takie jak:
- Tworzenie plików i folderów.
- Usuwanie plików i folderów.
- Listowanie zawartości folderów.
- Zmiana nazw plików i folderów.
- Odczyt i zapis danych w plikach.
- Rekurencyjne usuwanie folderów wraz z ich podfolderami i plikami.
Aplikacja
Aby wykonywać główne operacje manipulacji plikami i folderami w strukturze aplikacji, używamy zasobu _app:
Foldery w aplikacji
Zapewnia uzyskanie istniejącego folderu, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mojFolder = _app.folder("moj/folder")
const mojFolder = _app.folder("moj/folder")
mojFolder = _app.folder("moj/folder")
mojFolder = _app.folder("moj/folder")
val mojFolder = _app.folder("moj/folder")
final mojFolder = _app.folder("moj/folder")
Pliki w aplikacji
Zapewnia uzyskanie istniejącego pliku, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mojPlik = _app.file("moj/folder/plik.txt")
const mojPlik = _app.file("moj/folder/plik.txt")
mojPlik = _app.file("moj/folder/plik.txt")
mojPlik = _app.file("moj/folder/plik.txt")
val mojPlik = _app.file("moj/folder/plik.txt")
final mojPlik = _app.file("moj/folder/plik.txt")
Ścieżki w aplikacji
Pobiera ścieżkę pliku lub folderu, niezależnie od tego, czy istnieje, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const nowyPlik = _app.path("moj/folder/nowy-plik.txt")
const nowyPlik = _app.path("moj/folder/nowy-plik.txt")
nowyPlik = _app.path("moj/folder/nowy-plik.txt")
nowyPlik = _app.path("moj/folder/nowy-plik.txt")
val nowyPlik = _app.path("moj/folder/nowy-plik.txt")
final nowyPlik = _app.path("moj/folder/nowy-plik.txt")
Storage
Aby wykonywać główne operacje manipulacji plikami i folderami w folderze 📁 storage aplikacji, używamy zasobu _storage:
Foldery w Storage
Zapewnia uzyskanie istniejącego folderu, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Rzeczywista ścieżka folderu będzie następująca:
// storage/filesystem/server/moj/folder
const storageMojFolder = _storage.filesystem("server", "moj/folder")
const mojFolder = storageMojFolder.folder()
// Rzeczywista ścieżka folderu będzie następująca:
// storage/filesystem/server/moj/folder
const storageMojFolder = _storage.filesystem("server", "moj/folder")
const mojFolder = storageMojFolder.folder()
# Rzeczywista ścieżka folderu będzie następująca:
# storage/filesystem/server/moj/folder
storageMojFolder = _storage.filesystem("server", "moj/folder")
mojFolder = storageMojFolder.folder()
# Rzeczywista ścieżka folderu będzie następująca:
# storage/filesystem/server/moj/folder
storageMojFolder = _storage.filesystem("server", "moj/folder")
mojFolder = storageMojFolder.folder()
// Rzeczywista ścieżka folderu będzie następująca:
// storage/filesystem/server/moj/folder
val storageMojFolder = _storage.filesystem("server", "moj/folder")
val mojFolder = storageMojFolder.folder()
// Rzeczywista ścieżka folderu będzie następująca:
// storage/filesystem/server/moj/folder
final storageMojFolder = _storage.filesystem("server", "moj/folder")
final mojFolder = storageMojFolder.folder()
Pliki w Storage
Zapewnia uzyskanie istniejącego pliku, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Rzeczywista ścieżka pliku będzie następująca:
// storage/filesystem/server/moj/folder/plik.txt
const storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
const plik = storagePlik.file()
// Rzeczywista ścieżka pliku będzie następująca:
// storage/filesystem/server/moj/folder/plik.txt
const storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
const plik = storagePlik.file()
# Rzeczywista ścieżka pliku będzie następująca:
# storage/filesystem/server/moj/folder/plik.txt
storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
plik = storagePlik.file()
# Rzeczywista ścieżka pliku będzie następująca:
# storage/filesystem/server/moj/folder/plik.txt
storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
plik = storagePlik.file()
// Rzeczywista ścieżka pliku będzie następująca:
// storage/filesystem/server/moj/folder/plik.txt
val storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
val plik = storagePlik.file()
// Rzeczywista ścieżka pliku będzie następująca:
// storage/filesystem/server/moj/folder/plik.txt
final storagePlik = _storage.filesystem("server", "moj/folder", "plik.txt")
final plik = storagePlik.file()
Ścieżki w Storage
Pobiera ścieżkę pliku lub folderu, niezależnie od tego, czy istnieje, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Rzeczywista ścieżka nowego folderu będzie następująca:
// storage/filesystem/server/moj/nowy-folder
const storageFolder = _storage.filesystem("server", "moj/nowy-folder")
const folder = storageFolder.path()
// Rzeczywista ścieżka nowego pliku będzie następująca:
// storage/filesystem/server/moj/folder/nowy-plik.txt
const storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
const plik = storagePlik.path()
// Rzeczywista ścieżka nowego folderu będzie następująca:
// storage/filesystem/server/moj/nowy-folder
const storageFolder = _storage.filesystem("server", "moj/nowy-folder")
const folder = storageFolder.path()
// Rzeczywista ścieżka nowego pliku będzie następująca:
// storage/filesystem/server/moj/folder/nowy-plik.txt
const storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
const plik = storagePlik.path()
# Rzeczywista ścieżka nowego folderu będzie następująca:
# storage/filesystem/server/moj/nowy-folder
storageFolder = _storage.filesystem("server", "moj/nowy-folder")
folder = storageFolder.path()
# Rzeczywista ścieżka nowego pliku będzie następująca:
# storage/filesystem/server/moj/folder/nowy-plik.txt
storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
plik = storagePlik.path()
# Rzeczywista ścieżka nowego folderu będzie następująca:
# storage/filesystem/server/moj/nowy-folder
storageFolder = _storage.filesystem("server", "moj/nowy-folder")
folder = storageFolder.path()
# Rzeczywista ścieżka nowego pliku będzie następująca:
# storage/filesystem/server/moj/folder/nowy-plik.txt
storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
plik = storagePlik.path()
// Rzeczywista ścieżka nowego folderu będzie następująca:
// storage/filesystem/server/moj/nowy-folder
val storageFolder = _storage.filesystem("server", "moj/nowy-folder")
val folder = storageFolder.path()
// Rzeczywista ścieżka nowego pliku będzie następująca:
// storage/filesystem/server/moj/folder/nowy-plik.txt
val storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
val plik = storagePlik.path()
// Rzeczywista ścieżka nowego folderu będzie następująca:
// storage/filesystem/server/moj/nowy-folder
final storageFolder = _storage.filesystem("server", "moj/nowy-folder")
final folder = storageFolder.path()
// Rzeczywista ścieżka nowego pliku będzie następująca:
// storage/filesystem/server/moj/folder/nowy-plik.txt
final storagePlik = _storage.filesystem("server", "moj/folder", "nowy-plik.txt")
final plik = storagePlik.path()
System operacyjny
Aby wykonywać główne operacje manipulacji plikami i folderami w dowolnym miejscu systemu operacyjnego, używamy zasobu _os:
Foldery w systemie operacyjnym
Zapewnia uzyskanie istniejącego folderu, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mojFolder = _os.folder("/tmp/moj/folder")
const mojFolder = _os.folder("/tmp/moj/folder")
mojFolder = _os.folder("/tmp/moj/folder")
mojFolder = _os.folder("/tmp/moj/folder")
val mojFolder = _os.folder("/tmp/moj/folder")
final mojFolder = _os.folder("/tmp/moj/folder")
Pliki w systemie operacyjnym
Zapewnia uzyskanie istniejącego pliku, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const mojPlik = _os.file("/tmp/moj/folder/plik.txt")
const mojPlik = _os.file("/tmp/moj/folder/plik.txt")
mojPlik = _os.file("/tmp/moj/folder/plik.txt")
mojPlik = _os.file("/tmp/moj/folder/plik.txt")
val mojPlik = _os.file("/tmp/moj/folder/plik.txt")
final mojPlik = _os.file("/tmp/moj/folder/plik.txt")
Ścieżki w systemie operacyjnym
Pobiera ścieżkę pliku lub folderu, niezależnie od tego, czy istnieje, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
const nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
val nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
final nowyPlik = _os.path("/tmp/moj/folder/nowy-plik.txt")
Tworzenie folderów
Metoda mkdir tworzy folder.
W poniższym przykładzie tworzony jest określony folder w katalogu głównym aplikacji:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const folder = _app.path("temp")
folder.mkdir()
const folder = _app.path("temp")
folder.mkdir()
folder = _app.path("temp")
folder.mkdir()
folder = _app.path("temp")
folder.mkdir()
val folder = _app.path("temp")
folder.mkdir()
final folder = _app.path("temp")
folder.mkdir()
Aby utworzyć podfolder w istniejącym folderze, podaj pełną ścieżkę, oddzielając hierarchię folderów znakiem /:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const podfolder = _app.path("temp/inny")
podfolder.mkdir()
const podfolder = _app.path("temp/inny")
podfolder.mkdir()
podfolder = _app.path("temp/inny")
podfolder.mkdir()
podfolder = _app.path("temp/inny")
podfolder.mkdir()
val podfolder = _app.path("temp/inny")
podfolder.mkdir()
final podfolder = _app.path("temp/inny")
podfolder.mkdir()
Natomiast mkdirs tworzy foldery nadrzędne i/lub podfoldery, jeśli nie istnieją, więc pozwala utworzyć strukturę folderów w aplikacji, na przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
const sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
val sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
final sciezkaFolderow = _app.path("temp/a/b/c")
sciezkaFolderow.mkdirs()
Zasób _storage ma metodę ensurePath, która sprawdza, czy ścieżka istnieje; jeśli nie, to ją tworzy:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
// Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
const plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
// Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
# Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
# Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
val plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
// Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
final plik = _storage.filesystem(
"public",
"temp/podfolder",
"plik.txt"
)
// Tworzy strukturę folderów, jeśli nie istnieje:
plik.ensurePath()
Zatem ensurePath zapewnia, że struktura folderów istnieje.
Usuwanie plików i folderów
Metodą delete możemy usuwać zarówno foldery, jak i pliki, przy czym foldery muszą być puste; zobacz przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Usuwa pusty folder:
const pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
// Usuwa plik:
const plik = _app.file("folder/plik.txt")
plik.delete()
// Usuwa ścieżkę, pusty folder lub plik:
const sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
// Usuwa pusty folder:
const pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
// Usuwa plik:
const plik = _app.file("folder/plik.txt")
plik.delete()
// Usuwa ścieżkę, pusty folder lub plik:
const sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
# Usuwa pusty folder:
pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
# Usuwa plik:
plik = _app.file("folder/plik.txt")
plik.delete()
# Usuwa ścieżkę, pusty folder lub plik:
sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
# Usuwa pusty folder:
pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
# Usuwa plik:
plik = _app.file("folder/plik.txt")
plik.delete()
# Usuwa ścieżkę, pusty folder lub plik:
sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
// Usuwa pusty folder:
val pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
// Usuwa plik:
val plik = _app.file("folder/plik.txt")
plik.delete()
// Usuwa ścieżkę, pusty folder lub plik:
val sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
// Usuwa pusty folder:
final pustyFolder = _app.folder("folder/pusty")
pustyFolder.delete()
// Usuwa plik:
final plik = _app.file("folder/plik.txt")
plik.delete()
// Usuwa ścieżkę, pusty folder lub plik:
final sciezka = _app.path("folder1/plik-lub-pusty-folder")
sciezka.delete()
Metoda deleteAll pozwala usunąć wszystko, czyli wszystkie pliki, foldery i podfoldery rekurencyjnie:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Usuwa folder i całą zawartość rekurencyjnie:
const pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
// Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
// w tym podfoldery i pliki:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
// Usuwa folder i całą zawartość rekurencyjnie:
const pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
// Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
// w tym podfoldery i pliki:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
# Usuwa folder i całą zawartość rekurencyjnie:
pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
# Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
# w tym podfoldery i pliki:
sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
# Usuwa folder i całą zawartość rekurencyjnie:
pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
# Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
# w tym podfoldery i pliki:
sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
// Usuwa folder i całą zawartość rekurencyjnie:
val pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
// Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
// w tym podfoldery i pliki:
val sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
// Usuwa folder i całą zawartość rekurencyjnie:
final pustyFolder = _app.folder("folder/przyklad")
pustyFolder.deleteAll()
// Usuwa ścieżkę folderu i całą jego zawartość wewnętrzną,
// w tym podfoldery i pliki:
final sciezka = _app.path("sciezka/folder")
sciezka.deleteAll()
Aby usunąć tylko pliki wewnątrz folderu i nie usuwać niczego w podfolderach, mamy deleteFiles, która pozwala przekazać rozszerzenie, jeśli chcesz usunąć tylko pliki z określonym rozszerzeniem:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Usuwa pliki tylko wewnątrz folderu:
const folder = _app.folder("folder/przyklad")
folder.deleteFiles()
// Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
// Usuwa pliki tylko wewnątrz folderu:
const folder = _app.folder("folder/przyklad")
folder.deleteFiles()
// Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
# Usuwa pliki tylko wewnątrz folderu:
folder = _app.folder("folder/przyklad")
folder.deleteFiles()
# Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
# Usuwa pliki tylko wewnątrz folderu:
folder = _app.folder("folder/przyklad")
folder.deleteFiles()
# Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
// Usuwa pliki tylko wewnątrz folderu:
val folder = _app.folder("folder/przyklad")
folder.deleteFiles()
// Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
val sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
// Usuwa pliki tylko wewnątrz folderu:
final folder = _app.folder("folder/przyklad")
folder.deleteFiles()
// Usuwa pliki z rozszerzeniem JPG tylko wewnątrz folderu:
final sciezka = _app.path("sciezka/folder")
sciezka.deleteFiles("jpg")
Aby usuwać tylko pliki rekurencyjnie i zachować strukturę folderów, mamy deleteAllFiles, która również pozwala przekazać rozszerzenie, jeśli chcesz usunąć tylko określony typ pliku; zobacz te dwa przykłady:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
const folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
// Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
// Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
const folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
// Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
const sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
# Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
# Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
# Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
# Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
// Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
val folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
// Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
val sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
// Usuwa wszystkie pliki wewnątrz folderu i podfolderów:
final folder = _app.folder("folder/przyklad")
folder.deleteAllFiles()
// Usuwa wszystkie pliki z rozszerzeniem JPG wewnątrz folderu i podfolderów:
final sciezka = _app.path("sciezka/folder")
sciezka.deleteAllFiles("jpg")
Zmiana nazwy lub przenoszenie
Przeniesienie folderu to to samo co zmiana jego nazwy:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const folder = _app.folder("temp")
folder.renameTo("test")
const folder = _app.folder("temp")
folder.renameTo("test")
folder = _app.folder("temp")
folder.renameTo("test")
folder = _app.folder("temp")
folder.renameTo("test")
val folder = _app.folder("temp")
folder.renameTo("test")
final folder = _app.folder("temp")
folder.renameTo("test")
Aby zmienić nazwę folderu i zmienić jego poziom w hierarchii folderów, to to samo co przeniesienie folderu:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
const folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
val folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
final folder = _app.folder("temp/a/b")
folder.renameTo("test/z")
Aby przenieść podfolder bez zmiany jego nazwy, wystarczy wskazać nową ścieżkę w metodzie renameTo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
const folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
val folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
final folder = _app.folder("test/inny")
folder.renameTo("nowy/inny")
Zapisywanie zawartości w plikach
Generowanie zawartości w plikach odbywa się za pomocą metody output, która zwraca obiekt typu OutputStream.
Aby zapisać dane do output, używamy metody printAndClose, która wypisuje zawartość do pliku i zamyka plik, zapisując zawartość.
Zapisywanie pliku tekstowego
Zobacz przykład tworzenia pliku z zawartością tekstową:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("temp").mkdir()
const zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
_app.path("temp").mkdir()
const zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
_app.path("temp").mkdir()
zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
_app.path("temp").mkdir()
zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
_app.path("temp").mkdir()
val zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
_app.path("temp").mkdir()
final zapis = _app.path("temp/plik.txt").output()
zapis.printAndClose("Mój tekst tutaj...")
Za każdym razem, gdy używamy
output, tworzony jest nowy plik, więc jeśli uruchomisz kod ponownie, plik zostanie utworzony od nowa.
Zapisywanie pliku JSON
Zobacz, jak możemy zapisywać dane JSON w plikach:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("temp").mkdir()
const zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
const zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
val zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("temp").mkdir()
final zapis = _app.path("temp/klient.json").output()
zapis.printAndClose(
_val.map()
.set("imie", "Maria Kowalska")
.set(
"rekordy",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
Aby wygenerować wcięty JSON, czyli sformatowany w wielu wierszach i z wcięciami, możemy przekazać liczbę spacji użytych do wcięcia, na przykład .toJSON(4).
Więcej szczegółów o metodzie toJSON w Values.
Odczytywanie zawartości plików
Pobieranie zawartości plików odbywa się za pomocą metody input, która zwraca obiekt typu InputStream.
Aby odczytać dane z input, używamy metody readAllAndClose, która odczytuje zawartość pliku i zamyka plik.
Odczyt pliku tekstowego
Zobacz przykład odczytu pliku i pobrania zawartości tekstowej:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const plik = _app.file("temp/plik.txt")
const odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
const plik = _app.file("temp/plik.txt")
const odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
plik = _app.file("temp/plik.txt")
odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
plik = _app.file("temp/plik.txt")
odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
val plik = _app.file("temp/plik.txt")
val odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
final plik = _app.file("temp/plik.txt")
final odczyt = plik.input()
_log.info(odczyt.readAllAndClose())
Odczyt pliku JSON
Zobacz, jak możemy przetwarzać dane JSON odczytane z plików:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const plik = _app.file("temp/plik.txt")
const odczyt = plik.input()
const dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
const plik = _app.file("temp/plik.txt")
const odczyt = plik.input()
const dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
plik = _app.file("temp/plik.txt")
odczyt = plik.input()
dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
plik = _app.file("temp/plik.txt")
odczyt = plik.input()
dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
val plik = _app.file("temp/plik.txt")
val odczyt = plik.input()
val dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
final plik = _app.file("temp/plik.txt")
final odczyt = plik.input()
final dane = _val.fromJSON(odczyt.readAllAndClose())
_log.info("Dane z pliku:", dane)
Więcej szczegółów o metodzie fromJSON zasobu Val.
Specyfika Storage
Zasób Storage ma kilka metod do bezpośredniego użycia.
Na przykład możemy uzyskać dostęp przez Storage:
To oznacza, że nie musimy pobierać file ani path, aby pracować z input lub output.
Zapisywanie pliku tekstowego w Storage
Po zainicjowaniu Storage dla pliku możemy wykonać zapis metodą output, która zwraca instancję obiektu OutputStream, pozwalającą przetwarzać i czytać dane.
Następnie w OutputStream metoda printAndClose zapisuje tekst (string) do pliku i zamyka go.
Zobacz ten przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
const tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
val tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
final tekst = _storage.filesystem("server", "temp", "plik.txt")
tekst.ensurePath()
tekst.output().printAndClose("Mój tekst tutaj...")
Odczyt pliku tekstowego w Storage
Po zainicjowaniu Storage dla pliku możemy wykonać odczyt metodą input, która zwraca instancję obiektu InputStream, pozwalającą przetwarzać i czytać dane.
Następnie w InputStream metoda readAllAndClose odczytuje cały plik i zamyka go, zwracając dane jako tekst (string).
Zobacz ten przykład:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
const tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
val tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
final tekst = _storage.filesystem("server", "temp", "plik.txt")
_log.info(tekst.input().readAllAndClose())
Tworzenie losowego pliku w Storage
Zasób _storage pozwala generować losowe nazwy plików metodą newRandomFile.
Należy zainicjować Storage dla ścieżki folderu, a podczas wykonywania metody newRandomFile przekazuje się rozszerzenie żądanego pliku.
Metoda zwraca nową instancję Storage dla automatycznie wygenerowanego losowego pliku, która ma być używana w początkowym folderze.
Zobacz, jak wygenerować plik z rozszerzeniem TXT o losowej nazwie:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const folder = _storage.filesystem("server", "temp")
const plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
const folder = _storage.filesystem("server", "temp")
const plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
folder = _storage.filesystem("server", "temp")
plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
folder = _storage.filesystem("server", "temp")
plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
val folder = _storage.filesystem("server", "temp")
val plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
final folder = _storage.filesystem("server", "temp")
final plik = folder.newRandomFile("txt")
plik.output().printAndClose("Mój tekst tutaj...")
Podsumowanie
Dzięki wielojęzycznej platformie low-code Netuno możemy bezpośrednio wykonywać wszystkie główne operacje na folderach i plikach.
Używając zasobów przeznaczonych do manipulacji plikami i folderami w:
_app- Aplikacja_storage- Storage aplikacji_os- System operacyjny
Ze względu na dobre praktyki i organizację powinniśmy priorytetowo używać Storage, wyjątki powinny dotyczyć tylko pojedynczych i ściśle koniecznych przypadków.
Netuno automatycznie zamyka wejścia i wyjścia na końcu przetwarzania usług, ale zgodnie z dobrymi praktykami powinniśmy zawsze starać się je zamykać.