檔案讀寫

檔案讀寫介面可讓您輕鬆地從裝置上傳或下載檔案,支援大檔案傳輸。您可以使用相關介面將檔案下載到本機或記憶體,或將記憶體或本機的檔案上傳到裝置。此外,還支援刪除檔案、修改檔案權限以及取得檔案資訊等功能。 如果檔案不存在或沒有權限,呼叫將引發原生的 Python 例外,如 OSErrorFileNotFoundError

下載檔案到本機

該介面可以將裝置上的檔案下載到本機。在以下範例中,將裝置上的檔案 /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'