подключение, просмотр и редактирование файловой системы android при помощи python
Телефон на Android, подключен к ПК в режиме передачи файлов. На телефоне и sd-карте большое количество фотографий, которые необходимо упорядочить. Возможно ли как-то подключиться к файловой системе телефона и sd-карте при помощи python? Модуль os не сработал: код
print(os.listdir(r'Этот компьютер\MI PLAY\disk\DCIM'))
выдает ошибку FileNotFoundError.
Отслеживать
задан 7 апр 2022 в 15:22
Anton Lugovkin Anton Lugovkin
47 1 1 серебряный знак 6 6 бронзовых знаков
0
Сортировка: Сброс на вариант по умолчанию
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
- python
- android
- файловая-система
Как открыть доступ к файлам телефона или планшета на Android по локальной сети

Я решил несколько расширить тематику сайта, и выбор мой пал на операционную систему Android. В принципе, тут всё понятно, я счастливый обладать Google Nexus 4. Полностью доволен как устройством, так и возможностями, которые он предоставляет. Вот решил поделиться тем, чем сам успешно пользуюсь с февраля 2013 года.
Итак, сегодня рассмотрим одну из самых интересных тем для пользователей устройств на базе ОС Android — это возможность обмена файлами по беспроводной локальной сети Wi-Fi. Для этого нам понадобится готовая локальная сеть (как настроить локальную сеть можно прочитать из этой статьи) и программа ES проводник, установленная на вашем устройстве. ES проводник — бесплатный файловый менеджер с большим количеством встроенных утилит на все случаи жизни. Хватит теории, теперь перейдем к практике.
Подробное описание по настройке доступа
- Устанавливаем ES проводник на телефон из магазина Google Play.

- Запускаем приложение, на момент написания статьи ES проводник имеет вот такой ярлык.

- В открывшемся окне нажимаем по кнопке «Быстрый доступ» в левом верхнем углу.

- После нажатия появится список категорий встроенных утилит ES проводника. Нам нужна категория «Средства», раскрываем её (после обновления, данный пункт в раздел «Сеть», так что открываем.

- Выбираем пункт «Удаленный доступ».

- Перед нами откроется утилита для поднятия FTP-сервера на телефоне.

- Нажимаем на клавишу «Настройки» и попадем в меню настроек FTP-сервера.

- Здесь можно указать порт, через который будет осуществляться доступ к устройству по локальной сети. Можно выбрать корневую папку для доступа по FTP-протоколу. Можно создать ярлык устройства на рабочий стол для быстрого запуска FTP-сервера. Для запрета подключения через анонимный доступ, можно указать логин и пароль в пункте «Управление аккаунтом».

- Если вы уже произвели все необходимые вам изменения в настройках (хотя сервер отлично работает и на стандартных настройках), возвращаемся в главное окно утилиты и жмём «Включить». Сервер включится и утилита покажет адрес для подключения.

- Далее есть два варианта:
- Если у вашего устройства динамический локальный IP-адрес в сети, или вы просто находитесь не у себя дома, то просто вводите адрес в окне проводника Windows. Жмём клавишу Enter и попадаем в файловую систему устройства.


- Если же вы, настроили постоянный IP-адрес вашему устройству в локальной сети, то можно добавить сетевой диск согласно этой инструкции для быстрого доступа к вашему телефону. Как предоставить вашему устройству постоянный IP-адрес вы можете узнать из инструкции к вашему Wi-Fi роутеру. В моём TP-Link эти настройки находятся в разделе DHCP → «Резервирование адресов». Здесь я указал MAC адреса моего компьютера и телефона, присвоив им нужные мне IP-адреса.

На этом всё. Надеюсь эта статья оказалась вам полезной, нажмите одну из кнопок ниже, чтобы рассказать о ней друзьям. Также подпишитесь на обновления сайта, введя свой e-mail в поле справа.
Работа с файловой системой
Работа с настройками уровня activity и приложения позволяет сохранить небольшие данные отдельных типов (string, int), но для работы с большими массивами данных, такими как графически файлы, файлы мультимедиа и т.д., нам придется обращаться к файловой системе.
ОС Android построена на основе Linux. Этот факт находит свое отражение в работе с файлами. Так, в путях к файлам в качестве разграничителя в Linux использует слеш «/», а не обратный слеш «\» (как в Windows). А все названия файлов и каталогов являются регистрозависимыми, то есть «data» это не то же самое, что и «Data».
Приложение Android сохраняет свои данные в каталоге /data/data// и, как правило, относительно этого каталога будет идти работа.
Для работы с файлами абстрактный класс android.content.Context определяет ряд методов:
- boolean deleteFile (String name) : удаляет определенный файл
- String[] fileList () : получает все файлы, которые содержатся в подкаталоге /files в каталоге приложения
- File getCacheDir() : получает ссылку на подкаталог cache в каталоге приложения
- File getDir(String dirName, int mode) : получает ссылку на подкаталог в каталоге приложения, если такого подкаталога нет, то он создается
- File getExternalCacheDir() : получает ссылку на папку /cache внешней файловой системы устройства
- File getExternalFilesDir(String type) : получает ссылку на каталог /files внешней файловой системы устройства
- File getFileStreamPath(String filename) : возвращает абсолютный путь к файлу в файловой системе
- FileInputStream openFileInput(String filename) : открывает файл для чтения
- FileOutputStream openFileOutput (String name, int mode) : открывает файл для записи
Все файлы, которые создаются и редактируются в приложении, как правило, хранятся в подкаталоге /files в каталоге приложения.
Для непосредственного чтения и записи файлов применяются также стандартные классы Java из пакета java.io.
Итак, применим функционал чтения-записи файлов в приложении. Пусть у нас будет следующая примитивная разметка layout:
Поле EditText предназначено для ввода текста, а TextView — для вывода ранее сохраненного текста. Для сохранения и восстановления текста добавлены две кнопки.
Теперь в коде Activity пропишем обработчики кнопок с сохранением и чтением файла:
package com.example.filesapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity < private final static String FILE_NAME = "content.txt"; @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); >// сохранение файла public void saveText(View view) < FileOutputStream fos = null; try < EditText textBox = findViewById(R.id.editor); String text = textBox.getText().toString(); fos = openFileOutput(FILE_NAME, MODE_PRIVATE); fos.write(text.getBytes()); Toast.makeText(this, "Файл сохранен", Toast.LENGTH_SHORT).show(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >finally < try< if(fos!=null) fos.close(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >> > // открытие файла public void openText(View view) < FileInputStream fin = null; TextView textView = findViewById(R.id.text); try < fin = openFileInput(FILE_NAME); byte[] bytes = new byte[fin.available()]; fin.read(bytes); String text = new String (bytes); textView.setText(text); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >finally < try< if(fin!=null) fin.close(); >catch(IOException ex) < Toast.makeText(this, ex.getMessage(), Toast.LENGTH_SHORT).show(); >> > >
При нажатии на кнопку сохранения будет создаваться поток вывода FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE)
В данном случае введенный текст будет сохраняться в файл «content.txt». При этом будет использоваться режим MODE_PRIVATE
Система позволяет создавать файлы с двумя разными режимами:
- MODE_PRIVATE : файлы могут быть доступны только владельцу приложения (режим по умолчанию)
- MODE_APPEND : данные могут быть добавлены в конец файла
Поэтому в данном случае если файл «content.txt» уже существует, то он будет перезаписан. Если же нам надо было дописать файл, тогда надо было бы использовать режим MODE_APPEND:
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
Для чтения файла применяется поток ввода FileInputStream :
FileInputStream fin = openFileInput(FILE_NAME);
Подробнее про использование потоков ввода-вывода можно прочитать в руководстве по Java: https://metanit.com/java/tutorial/6.3.php
В итоге после нажатия кнопки сохранения весь текст будет сохранен в файле /data/data/название_пакета/files/content.txt

Где физически находится созданный файл? Чтобы увидеть его на подключенном устройстве перейдем в Android Stud в меню к пункту View -> Tool Windows -> Device File Explorer

После этого откроектся окно Device File Explorer для просмотра файловой системы устройства. И в папке data/data/[название_пакета_приложения]/files мы сможем найти сохраненный файл.
Как получить полный доступ к файловой системе андроид?
где первое — почтовый клиент, а второе — мое приложение. Приложения такие как Термукс и Мт Манагер видят все содержимое папки без проблем. Пробовал сделать без библиотек, а также с библиотекой libsu, но результат не изменился. В чем может быть дело? Андроид 13, рут Magisk Какая дополнительная информация нужна?

Лог:
fun executeRootCommand(command: String): String val process = Runtime.getRuntime().exec(«su»)//arrayOf(«su», «-c», command)
val outputStream = DataOutputStream(process.outputStream)
val inputStream = BufferedReader(InputStreamReader(process.inputStream))
val errorStream = BufferedReader(InputStreamReader(process.errorStream))
outputStream.writeBytes(«$command\n»)
outputStream.writeBytes(«exit\n»)
outputStream.flush()
process.waitFor()
val output = StringBuilder()
var line: String?
while (inputStream.readLine().also < line = it >!= null) output.append(line).append(«\n»)
>
while (errorStream.readLine().also < line = it >!= null) output.append(line).append(«\n»)
>
Log.d(«abcde», «$command»)
Log.d(«abcde», «$output»)
outputStream.close()
inputStream.close()
errorStream.close()
- Вопрос задан 01 окт. 2023
- 190 просмотров