Работа с файлами и папками
Введение
В полиглотном backend-коде платформы Netuno мы можем работать с любым файлом или папкой.
Работа заключается в возможности создавать, переименовывать и удалять файлы и папки, изменять содержимое файлов и выводить список содержимого папок. В целом это те операции, которые обычно нужно выполнять программно.
В платформе Netuno есть возможности low-code программирования, которые позволяют работать с папками и файлами внутри приложения, а также с любыми файлами и папками системы в целом, то есть вне приложения.
Это полезно, когда нам нужно автоматизировать какой-либо процесс, который должен работать с каким-либо файлом; давайте посмотрим как.
Возможности полиглотного low-code программирования, которые позволяют работать с файлами:
_app- Приложение_storage- Storage_os- Операционная система
Через эти ресурсы у нас есть методы для:
.file- Существующий файл..folder- Существующая папка..path- Общий путь, который может быть как файлом, так и папкой, существующим или несуществующим.
С помощью этих методов мы получаем объект типа File, который предоставляет все средства для работы с файлами, папками и путями в целом, что позволяет выполнять такие операции, как:
- Создавать файлы и папки.
- Удалять файлы и папки.
- Выводить список содержимого папок.
- Переименовывать файлы и папки.
- Читать и записывать данные в файлы.
- Рекурсивно удалять папки и их соответствующие подпапки и файлы.
Приложение
Чтобы выполнить основные операции работы с файлами и папками внутри структуры приложения,
используем ресурс _app:
Папки в приложении
Гарантирует получение существующей папки, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const мояПапка = _app.folder("моя/папка")
const мояПапка = _app.folder("моя/папка")
мояПапка = _app.folder("моя/папка")
мояПапка = _app.folder("моя/папка")
val мояПапка = _app.folder("моя/папка")
final мояПапка = _app.folder("моя/папка")
Файлы в приложении
Гарантирует получение существующего файла, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const мойФайл = _app.file("моя/папка/файл.txt")
const мойФайл = _app.file("моя/папка/файл.txt")
мойФайл = _app.file("моя/папка/файл.txt")
мойФайл = _app.file("моя/папка/файл.txt")
val мойФайл = _app.file("моя/папка/файл.txt")
final мойФайл = _app.file("моя/папка/файл.txt")
Пути в приложении
Получает путь файла или папки независимо от того, существует он или нет, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const новыйФайл = _app.path("моя/папка/новый-файл.txt")
const новыйФайл = _app.path("моя/папка/новый-файл.txt")
новыйФайл = _app.path("моя/папка/новый-файл.txt")
новыйФайл = _app.path("моя/папка/новый-файл.txt")
val новыйФайл = _app.path("моя/папка/новый-файл.txt")
final новыйФайл = _app.path("моя/папка/новый-файл.txt")
Storage
Чтобы выполнить основные операции работы с файлами и папками внутри папки 📁 storage приложения,
используем ресурс _storage:
Папки в Storage
Гарантирует получение существующей папки, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Реальный путь папки будет:
// storage/filesystem/server/моя/папка
const storageМояПапка = _storage.filesystem("server", "моя/папка")
const мояПапка = storageМояПапка.folder()
// Реальный путь папки будет:
// storage/filesystem/server/моя/папка
const storageМояПапка = _storage.filesystem("server", "моя/папка")
const мояПапка = storageМояПапка.folder()
# Реальный путь папки будет:
# storage/filesystem/server/моя/папка
storageМояПапка = _storage.filesystem("server", "моя/папка")
мояПапка = storageМояПапка.folder()
# Реальный путь папки будет:
# storage/filesystem/server/моя/папка
storageМояПапка = _storage.filesystem("server", "моя/папка")
мояПапка = storageМояПапка.folder()
// Реальный путь папки будет:
// storage/filesystem/server/моя/папка
val storageМояПапка = _storage.filesystem("server", "моя/папка")
val мояПапка = storageМояПапка.folder()
// Реальный путь папки будет:
// storage/filesystem/server/моя/папка
final storageМояПапка = _storage.filesystem("server", "моя/папка")
final мояПапка = storageМояПапка.folder()
Файлы в Storage
Гарантирует получение существующего файла, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Реальный путь файла будет:
// storage/filesystem/server/моя/папка/файл.txt
const storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
const файл = storageФайл.file()
// Реальный путь файла будет:
// storage/filesystem/server/моя/папка/файл.txt
const storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
const файл = storageФайл.file()
# Реальный путь файла будет:
# storage/filesystem/server/моя/папка/файл.txt
storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
файл = storageФайл.file()
# Реальный путь файла будет:
# storage/filesystem/server/моя/папка/файл.txt
storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
файл = storageФайл.file()
// Реальный путь файла будет:
// storage/filesystem/server/моя/папка/файл.txt
val storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
val файл = storageФайл.file()
// Реальный путь файла будет:
// storage/filesystem/server/моя/папка/файл.txt
final storageФайл = _storage.filesystem("server", "моя/папка", "файл.txt")
final файл = storageФайл.file()
Пути в Storage
Получает путь файла или папки независимо от того, существует он или нет, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Реальный путь новой папки будет:
// storage/filesystem/server/моя/новая-папка
const storageПапка = _storage.filesystem("server", "моя/новая-папка")
const папка = storageПапка.path()
// Реальный путь нового файла будет:
// storage/filesystem/server/моя/папка/новый-файл.txt
const storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
const файл = storageФайл.path()
// Реальный путь новой папки будет:
// storage/filesystem/server/моя/новая-папка
const storageПапка = _storage.filesystem("server", "моя/новая-папка")
const папка = storageПапка.path()
// Реальный путь нового файла будет:
// storage/filesystem/server/моя/папка/новый-файл.txt
const storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
const файл = storageФайл.path()
# Реальный путь новой папки будет:
# storage/filesystem/server/моя/новая-папка
storageПапка = _storage.filesystem("server", "моя/новая-папка")
папка = storageПапка.path()
# Реальный путь нового файла будет:
# storage/filesystem/server/моя/папка/новый-файл.txt
storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
файл = storageФайл.path()
# Реальный путь новой папки будет:
# storage/filesystem/server/моя/новая-папка
storageПапка = _storage.filesystem("server", "моя/новая-папка")
папка = storageПапка.path()
# Реальный путь нового файла будет:
# storage/filesystem/server/моя/папка/новый-файл.txt
storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
файл = storageФайл.path()
// Реальный путь новой папки будет:
// storage/filesystem/server/моя/новая-папка
val storageПапка = _storage.filesystem("server", "моя/новая-папка")
val папка = storageПапка.path()
// Реальный путь нового файла будет:
// storage/filesystem/server/моя/папка/новый-файл.txt
val storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
val файл = storageФайл.path()
// Реальный путь новой папки будет:
// storage/filesystem/server/моя/новая-папка
final storageПапка = _storage.filesystem("server", "моя/новая-папка")
final папка = storageПапка.path()
// Реальный путь нового файла будет:
// storage/filesystem/server/моя/папка/новый-файл.txt
final storageФайл = _storage.filesystem("server", "моя/папка", "новый-файл.txt")
final файл = storageФайл.path()
Операционная система
Чтобы выполнить основные операции работы с файлами и папками в любом месте операционной системы,
используем ресурс _os:
Папки в операционной системе
Гарантирует получение существующей папки, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const мояПапка = _os.folder("/tmp/моя/папка")
const мояПапка = _os.folder("/tmp/моя/папка")
мояПапка = _os.folder("/tmp/моя/папка")
мояПапка = _os.folder("/tmp/моя/папка")
val мояПапка = _os.folder("/tmp/моя/папка")
final мояПапка = _os.folder("/tmp/моя/папка")
Файлы в операционной системе
Гарантирует получение существующего файла, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const мойФайл = _os.file("/tmp/моя/папка/файл.txt")
const мойФайл = _os.file("/tmp/моя/папка/файл.txt")
мойФайл = _os.file("/tmp/моя/папка/файл.txt")
мойФайл = _os.file("/tmp/моя/папка/файл.txt")
val мойФайл = _os.file("/tmp/моя/папка/файл.txt")
final мойФайл = _os.file("/tmp/моя/папка/файл.txt")
Пути в операционной системе
Получает путь файла или папки независимо от того, существует он или нет, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
const новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
val новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
final новыйФайл = _os.path("/tmp/моя/папка/новый-файл.txt")
Создание папок
Метод mkdir создаёт папку.
В следующем примере создаётся указанная папка в корне приложения:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const папка = _app.path("временная")
папка.mkdir()
const папка = _app.path("временная")
папка.mkdir()
папка = _app.path("временная")
папка.mkdir()
папка = _app.path("временная")
папка.mkdir()
val папка = _app.path("временная")
папка.mkdir()
final папка = _app.path("временная")
папка.mkdir()
Чтобы создать подпапку внутри существующей папки, укажите полный путь, разделяя иерархию
папок через /:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const подпапка = _app.path("временная/другая")
подпапка.mkdir()
const подпапка = _app.path("временная/другая")
подпапка.mkdir()
подпапка = _app.path("временная/другая")
подпапка.mkdir()
подпапка = _app.path("временная/другая")
подпапка.mkdir()
val подпапка = _app.path("временная/другая")
подпапка.mkdir()
final подпапка = _app.path("временная/другая")
подпапка.mkdir()
А mkdirs создаёт предыдущие папки и/или подпапки, если они не существуют, поэтому позволяет создать структуру
папок в приложении, например:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
const путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
val путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
final путьПапок = _app.path("временная/a/b/c")
путьПапок.mkdirs()
У ресурса _storage есть метод ensurePath, который проверяет,
существует ли путь, и если нет, то создаёт:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
// Создаёт структуру папок, если она не существует:
файл.ensurePath()
const файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
// Создаёт структуру папок, если она не существует:
файл.ensurePath()
файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
# Создаёт структуру папок, если она не существует:
файл.ensurePath()
файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
# Создаёт структуру папок, если она не существует:
файл.ensurePath()
val файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
// Создаёт структуру папок, если она не существует:
файл.ensurePath()
final файл = _storage.filesystem(
"public",
"временная/подпапка",
"файл.txt"
)
// Создаёт структуру папок, если она не существует:
файл.ensurePath()
Таким образом, ensurePath гарантирует, что структура папок существует.
Удаление файлов и папок
С помощью метода delete мы можем удалять как папки, так и файлы, при этом папки должны быть пустыми,
смотрите пример:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Удаляет пустую папку:
const пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
// Удаляет файл:
const файл = _app.file("папка/файл.txt")
файл.delete()
// Удаляет путь, пустую папку или файл:
const путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
// Удаляет пустую папку:
const пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
// Удаляет файл:
const файл = _app.file("папка/файл.txt")
файл.delete()
// Удаляет путь, пустую папку или файл:
const путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
# Удаляет пустую папку:
пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
# Удаляет файл:
файл = _app.file("папка/файл.txt")
файл.delete()
# Удаляет путь, пустую папку или файл:
путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
# Удаляет пустую папку:
пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
# Удаляет файл:
файл = _app.file("папка/файл.txt")
файл.delete()
# Удаляет путь, пустую папку или файл:
путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
// Удаляет пустую папку:
val пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
// Удаляет файл:
val файл = _app.file("папка/файл.txt")
файл.delete()
// Удаляет путь, пустую папку или файл:
val путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
// Удаляет пустую папку:
final пустаяПапка = _app.folder("папка/пустая")
пустаяПапка.delete()
// Удаляет файл:
final файл = _app.file("папка/файл.txt")
файл.delete()
// Удаляет путь, пустую папку или файл:
final путь = _app.path("папка1/файл-или-пустая-папка")
путь.delete()
С помощью deleteAll можно удалить всё, то есть все файлы, папки и подпапки рекурсивно:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Удаляет папку и всё содержимое рекурсивно:
const пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
// Удаляет путь папки и всё её внутреннее содержимое,
// включая подпапки и файлы:
const путь = _app.path("путь/папка")
путь.deleteAll()
// Удаляет папку и всё содержимое рекурсивно:
const пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
// Удаляет путь папки и всё её внутреннее содержимое,
// включая подпапки и файлы:
const путь = _app.path("путь/папка")
путь.deleteAll()
# Удаляет папку и всё содержимое рекурсивно:
пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
# Удаляет путь папки и всё её внутреннее содержимое,
# включая подпапки и файлы:
путь = _app.path("путь/папка")
путь.deleteAll()
# Удаляет папку и всё содержимое рекурсивно:
пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
# Удаляет путь папки и всё её внутреннее содержимое,
# включая подпапки и файлы:
путь = _app.path("путь/папка")
путь.deleteAll()
// Удаляет папку и всё содержимое рекурсивно:
val пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
// Удаляет путь папки и всё её внутреннее содержимое,
// включая подпапки и файлы:
val путь = _app.path("путь/папка")
путь.deleteAll()
// Удаляет папку и всё содержимое рекурсивно:
final пустаяПапка = _app.folder("папка/пример")
пустаяПапка.deleteAll()
// Удаляет путь папки и всё её внутреннее содержимое,
// включая подпапки и файлы:
final путь = _app.path("путь/папка")
путь.deleteAll()
Чтобы удалить только файлы внутри папки и ничего не удалять в подпапках, есть deleteFiles, который позволяет
передать расширение, если нужно удалить только файлы с определённым расширением:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Удаляет файлы только внутри папки:
const папка = _app.folder("папка/пример")
папка.deleteFiles()
// Удаляет файлы с расширением JPG только внутри папки:
const путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
// Удаляет файлы только внутри папки:
const папка = _app.folder("папка/пример")
папка.deleteFiles()
// Удаляет файлы с расширением JPG только внутри папки:
const путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
# Удаляет файлы только внутри папки:
папка = _app.folder("папка/пример")
папка.deleteFiles()
# Удаляет файлы с расширением JPG только внутри папки:
путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
# Удаляет файлы только внутри папки:
папка = _app.folder("папка/пример")
папка.deleteFiles()
# Удаляет файлы с расширением JPG только внутри папки:
путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
// Удаляет файлы только внутри папки:
val папка = _app.folder("папка/пример")
папка.deleteFiles()
// Удаляет файлы с расширением JPG только внутри папки:
val путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
// Удаляет файлы только внутри папки:
final папка = _app.folder("папка/пример")
папка.deleteFiles()
// Удаляет файлы с расширением JPG только внутри папки:
final путь = _app.path("путь/папка")
путь.deleteFiles("jpg")
Чтобы удалить только файлы рекурсивно и сохранить структуру папок, есть deleteAllFiles, который
также позволяет передать расширение, если нужно удалить только определённый тип файлов, смотрите эти два
примера:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
// Удаляет все файлы внутри папки и подпапок:
const папка = _app.folder("папка/пример")
папка.deleteAllFiles()
// Удаляет все файлы с расширением JPG внутри папки и подпапок:
const путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
// Удаляет все файлы внутри папки и подпапок:
const папка = _app.folder("папка/пример")
папка.deleteAllFiles()
// Удаляет все файлы с расширением JPG внутри папки и подпапок:
const путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
# Удаляет все файлы внутри папки и подпапок:
папка = _app.folder("папка/пример")
папка.deleteAllFiles()
# Удаляет все файлы с расширением JPG внутри папки и подпапок:
путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
# Удаляет все файлы внутри папки и подпапок:
папка = _app.folder("папка/пример")
папка.deleteAllFiles()
# Удаляет все файлы с расширением JPG внутри папки и подпапок:
путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
// Удаляет все файлы внутри папки и подпапок:
val папка = _app.folder("папка/пример")
папка.deleteAllFiles()
// Удаляет все файлы с расширением JPG внутри папки и подпапок:
val путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
// Удаляет все файлы внутри папки и подпапок:
final папка = _app.folder("папка/пример")
папка.deleteAllFiles()
// Удаляет все файлы с расширением JPG внутри папки и подпапок:
final путь = _app.path("путь/папка")
путь.deleteAllFiles("jpg")
Переименование или перемещение
Чтобы переместить папку, это то же самое, что переименовать её:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const папка = _app.folder("временная")
папка.renameTo("тест")
const папка = _app.folder("временная")
папка.renameTo("тест")
папка = _app.folder("временная")
папка.renameTo("тест")
папка = _app.folder("временная")
папка.renameTo("тест")
val папка = _app.folder("временная")
папка.renameTo("тест")
final папка = _app.folder("временная")
папка.renameTo("тест")
Чтобы переименовать папку и изменить её уровень в иерархии папок, это то же самое, что переместить папку:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
const папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
val папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
final папка = _app.folder("временная/a/b")
папка.renameTo("тест/z")
А чтобы переместить подпапку без изменения её имени, достаточно указать новый путь в методе renameTo:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const папка = _app.folder("тест/другая")
папка.renameTo("новая")
const папка = _app.folder("тест/другая")
папка.renameTo("новая")
папка = _app.folder("тест/другая")
папка.renameTo("новая")
папка = _app.folder("тест/другая")
папка.renameTo("новая")
val папка = _app.folder("тест/другая")
папка.renameTo("новая")
final папка = _app.folder("тест/другая")
папка.renameTo("новая")
Сохранение содержимого в файлы
Генерация содержимого в файлах выполняется через метод output, который предоставляет объект типа
OutputStream.
Чтобы записать данные в output, используем метод printAndClose,
который записывает содержимое в файл и закрывает файл, сохраняя содержимое.
Запись текстового файла
Смотрите пример того, как создать файл с текстовым содержимым:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("временная").mkdir()
const запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
_app.path("временная").mkdir()
const запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
_app.path("временная").mkdir()
запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
_app.path("временная").mkdir()
запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
_app.path("временная").mkdir()
val запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
_app.path("временная").mkdir()
final запись = _app.path("временная/файл.txt").output()
запись.printAndClose("Мой текст здесь...")
Всякий раз, когда мы используем
output, создаётся новый файл, поэтому если выполнить код снова, файл будет создан заново.
Запись файла JSON
Смотрите, как можно сохранять данные JSON в файлы:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_app.path("временная").mkdir()
const запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("временная").mkdir()
const запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("временная").mkdir()
запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("временная").mkdir()
запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("временная").mkdir()
val запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
_app.path("временная").mkdir()
final запись = _app.path("временная/клиент.json").output()
запись.printAndClose(
_val.map()
.set("имя", "Мария Иоакина")
.set(
"записи",
_val.list()
.add(1).add(2).add(3)
)
.toJSON()
)
Чтобы сгенерировать JSON с отступами, то есть отформатированный в несколько строк и с табуляцией, можно передать количество пробелов,
которые будут использоваться для табуляции, например .toJSON(4).
Подробнее о методе toJSON в Values.
Чтение содержимого из файлов
Получение содержимого файлов выполняется через метод input, который предоставляет объект типа
InputStream.
Чтобы прочитать данные в input, используем метод readAllAndClose,
который обрабатывает чтение содержимого файла и закрывает файл.
Чтение текстового файла
Смотрите пример того, как прочитать файл и получить текстовое содержимое:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const файл = _app.file("временная/файл.txt")
const чтение = файл.input()
_log.info(чтение.readAllAndClose())
const файл = _app.file("временная/файл.txt")
const чтение = файл.input()
_log.info(чтение.readAllAndClose())
файл = _app.file("временная/файл.txt")
чтение = файл.input()
_log.info(чтение.readAllAndClose())
файл = _app.file("временная/файл.txt")
чтение = файл.input()
_log.info(чтение.readAllAndClose())
val файл = _app.file("временная/файл.txt")
val чтение = файл.input()
_log.info(чтение.readAllAndClose())
final файл = _app.file("временная/файл.txt")
final чтение = файл.input()
_log.info(чтение.readAllAndClose())
Чтение файла JSON
Смотрите, как можно обрабатывать данные JSON, полученные из файлов:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const файл = _app.file("временная/файл.txt")
const чтение = файл.input()
const данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
const файл = _app.file("временная/файл.txt")
const чтение = файл.input()
const данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
файл = _app.file("временная/файл.txt")
чтение = файл.input()
данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
файл = _app.file("временная/файл.txt")
чтение = файл.input()
данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
val файл = _app.file("временная/файл.txt")
val чтение = файл.input()
val данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
final файл = _app.file("временная/файл.txt")
final чтение = файл.input()
final данные = _val.fromJSON(чтение.readAllAndClose())
_log.info("Данные файла:", данные)
Подробнее о методе fromJSON ресурса Val.
Особенности Storage
У ресурса storage есть несколько методов для прямого использования.
Например, мы можем получить через storage:
Это означает, что нам не нужно получать file или path, чтобы работать с input или output.
Запись текстового файла в Storage
При инициализации storage для файла мы можем выполнять запись с помощью метода output, который получает экземпляр объекта OutputStream, позволяющий обрабатывать и читать данные.
Тогда с OutputStream метод printAndClose
записывает текст (string) в файл и закрывает его.
Смотрите этот пример:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
const текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
val текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
final текст = _storage.filesystem("server", "временная", "файл.txt")
текст.ensurePath()
текст.output().printAndClose("Мой текст здесь...")
Чтение текстового файла в Storage
При инициализации storage для файла мы можем выполнять чтение с помощью метода input, который получает экземпляр объекта InputStream, позволяющий обрабатывать и читать данные.
Тогда с InputStream метод readAllAndClose
читает весь файл и закрывает его, возвращая данные как текст (string).
Смотрите этот пример:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
const текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
val текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
final текст = _storage.filesystem("server", "временная", "файл.txt")
_log.info(текст.input().readAllAndClose())
Создание случайного файла в Storage
Ресурс _storage позволяет генерировать случайные имена файлов с помощью метода newRandomFile.
Нужно инициализировать storage для пути папки, и при выполнении метода newRandomFile передаётся расширение нужного
файла.
Метод возвращает новый экземпляр storage для автоматически сгенерированного случайного файла, который должен использоваться в начальной папке.
Смотрите, как сгенерировать файл с расширением TXT со случайным именем:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
const папка = _storage.filesystem("server", "временная")
const файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
const папка = _storage.filesystem("server", "временная")
const файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
папка = _storage.filesystem("server", "временная")
файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
папка = _storage.filesystem("server", "временная")
файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
val папка = _storage.filesystem("server", "временная")
val файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
final папка = _storage.filesystem("server", "временная")
final файл = папка.newRandomFile("txt")
файл.output().printAndClose("Мой текст здесь...")
Заключение
С полиглотным low-code фреймворком Netuno мы можем выполнять все основные операции с папками и файлами напрямую.
При использовании ресурсов, специфичных для работы с файлами и папками в:
_app- Приложение_storage- Storage приложения_os- Операционная система
Из соображений лучших практик и организации мы должны отдавать приоритет использованию storage; исключения должны быть только точечными и строго необходимыми.
Netuno обрабатывает автоматическое закрытие input и output в конце обработки сервисов, но по лучшим практикам мы должны стараться всегда закрывать их.