Чтение и запись файлов¶
Интерфейсы чтения и записи файлов позволяют легко загружать файлы на устройство или скачивать их с устройства, поддерживается передача больших файлов. Вы можете использовать соответствующие интерфейсы для скачивания файлов на локальный диск или в память, а также для загрузки файлов из памяти или с локального диска на устройство. Кроме того, поддерживаются удаление файлов, изменение прав доступа к файлам и получение информации о файлах.
Если файл не существует или нет прав доступа, вызов приведёт к возникновению стандартных исключений Python, таких как OSError, FileNotFoundError.
Скачивание файла на локальный диск¶
Этот интерфейс позволяет скачать файл с устройства на локальный компьютер. В примере ниже содержимое файла /verity_key с устройства скачивается в файл my_file.txt на локальном компьютере. Обратите внимание, что скачанный файл не сохраняет исходную информацию о правах доступа.
d.download_file("/verity_key", "my_file.txt")
>>> d.download_file("/adb_keys", "my_file.txt")
name: "adb_keys"
path: "/adb_keys"
st_mode: 33188
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
st_size: 2202
>>> result = d.download_file("/adb_keys", "my_file.txt")
>>> print(result.st_mtime)
1230768000
>>> os.chmod("my_file.txt", result.st_mode)
Скачивание файла в память¶
Этот интерфейс позволяет скачать файл с устройства в память (через BytesIO).
from io import BytesIO
fd = BytesIO()
d.download_fd("/verity_key", fd)
print(fd.getvalue())
Скачивание файла в файловый дескриптор¶
Этот интерфейс позволяет скачать файл с устройства в файловый дескриптор. Обратите внимание, что файл необходимо открыть в двоичном режиме wb.
fd = open("my_file.txt", "wb")
d.download_fd("/verity_key", fd)
Загрузка файла на устройство¶
Этот интерфейс позволяет загрузить локальный файл на устройство. В примере ниже локальный файл 测试文件.txt загружается в файл /data/local/tmp/file.txt на устройстве. Загруженный файл также не сохраняет исходную информацию о правах доступа.
d.upload_file("测试文件.txt", "/data/local/tmp/file.txt")
>>> d.upload_file("file.txt", "/data/local/tmp/file.txt")
name: "file.txt"
path: "/data/local/tmp/file.txt"
st_mode: 33184
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.upload_file("file.txt", "/data/local/tmp/file.txt")
>>> print(result.st_size)
0
Загрузка файла из памяти¶
В примере ниже содержимое файла из памяти загружается через BytesIO в файл /data/local/tmp/file.txt на устройстве.
from io import BytesIO
d.upload_fd(BytesIO(b"fileContent"), "/data/local/tmp/file.txt")
Загрузка файла из файлового дескриптора¶
В примере ниже содержимое локального файла myfile.txt загружается через файловый дескриптор fd в файл /data/local/tmp/file.txt на устройстве. Обратите внимание, что локальный файл необходимо открыть в двоичном режиме rb.
fd = open("myfile.txt", "rb")
d.upload_fd(fd, "/data/local/tmp/file.txt")
Удаление файла на устройстве¶
Этот интерфейс используется для удаления файлов на устройстве.
d.delete_file("/data/local/tmp/file.txt")
>>> d.delete_file("/data/local/tmp/file.txt")
True
>>> d.delete_file("/adb_keys")
Traceback (most recent call last):
File "<console>", line 1, in <module>
OSError: [Errno 30] Read-only file system
Изменение прав доступа к файлу¶
Этот интерфейс используется для изменения прав доступа к файлам на устройстве.
d.file_chmod("/data/local/tmp/file.txt", mode=0o777)
>>> d.file_chmod("/data/local/tmp/file.txt", mode=0o777)
name: "file.txt"
path: "/data/local/tmp/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.file_chmod("/data/local/tmp/file.txt", mode=0o777)
>>> print(oct(result.st_mode))
0o100777
Получение информации о файле¶
Этот интерфейс используется для получения информации о файле на устройстве.
d.file_stat("/data/local/tmp/file.txt")
>>> d.file_stat("/data/local/tmp/file.txt")
name: "file.txt"
path: "/data/local/tmp/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
>>> result = d.file_stat("/data/local/tmp/file.txt")
>>> print(result.name)
'file.txt'