Работа с файлами на Android
Добавлено: 14 апр 2012, 19:05
Введение:
Для работы с файлами, не забудьте в AndroidManifest добавить строчку:С помощью нее, программа будет иметь разрешение работать с файлами на SD карте.
Полезности:
Как получить путь к SD карте:или
Создание папки:
Копирование файла или директории:
from - путь к файлу/директории, который(-ое) мы будем копировать, to - путь к файлу/директории, куда мы будем копировать
Удаление файла или директории:
path - путь к файлу или директории, который(-ую) необходимо удалить
Перемещение файла или директории:
Перемещение файла, я осуществляю объединением команд копирования файла и его удаления:
Старался написать понятно, если что, в своих сообщениях дополняйте написанную мною информацию, или пишите замечания.
Спасибо: KamiSempai
Для работы с файлами, не забудьте в AndroidManifest добавить строчку:
Код: Выделить всё
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Полезности:
Как получить путь к SD карте:
Код: Выделить всё
String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) // если true
File sdDir = android.os.Environment.getExternalStorageDirectory();
Код: Выделить всё
String sdState = android.os.Environment.getExternalStorageState(); //Получаем состояние SD карты (подключена она или нет) - возвращается true и false соответственно
if (sdState.equals(android.os.Environment.MEDIA_MOUNTED)) // если true
String folder = Environment.getExternalStorageDirectory().toString();
Создание папки:
Код: Выделить всё
public static void createDir(String folder) {
File f1 = new File(folder); //Создаем файловую переменную
if (!f1.exists()) { //Если папка не существует
f1.mkdirs() //создаем её
}
}
from - путь к файлу/директории, который(-ое) мы будем копировать, to - путь к файлу/директории, куда мы будем копировать
Код: Выделить всё
public static boolean copy(String from, String to) {
try {
File fFrom = new File(from);
if (fFrom.isDirectory()) { // Если директория, копируем все ее содержимое
createDir(to);
String[] FilesList = fFrom.list();
for (int i = 0; i <= FilesList.length; i++)
if (!copy(from + "/" + FilesList[i], to + "/" + FilesList[i]))
return false; // Если при копировании произошла ошибка
} else if (fFrom.isFile()) { // Если файл просто копируем его
File fTo = new File(to);
InputStream in = new FileInputStream(fFrom); // Создаем потоки
OutputStream out = new FileOutputStream(fTo);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close(); // Закрываем потоки
out.close();
}
} catch (FileNotFoundException ex) { // Обработка ошибок
} catch (IOException e) { // Обработка ошибок
}
return true; // При удачной операции возвращаем true
}
Код: Выделить всё
//например:
copy("/mnt/sdcard/folder1/a.apk","/mnt/sdcard/folder2/a.apk");
//или
copy("/mnt/sdcard/folder1","/mnt/sdcard/folder2");
//Внимание! именно так, без знака "/" в конце!
path - путь к файлу или директории, который(-ую) необходимо удалить
Код: Выделить всё
public static void delete(String path) {
File file = new File(path); //Создаем файловую переменную
if (file.exists()) { //Если файл или директория существует
String deleteCmd = "rm -r " + path; //Создаем текстовую командную строку
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(deleteCmd); //Выполняем системные команды
} catch (IOException e) {
}
}
}
Код: Выделить всё
//например:
delete("/mnt/sdcard/a.apk")
//или
delete("/mnt/sdcard/folder")
Перемещение файла, я осуществляю объединением команд копирования файла и его удаления:
Код: Выделить всё
private boolean move(String from,String to) {
try {
File fFrom = new File(from);
if (fFrom.isDirectory()) { // Если директория, копируем все ее содержимое
createDir(to);
String[] FilesList = fFrom.list();
for (int i = 0; i <= FilesList.length; i++)
if (!copy(from + "/" + FilesList[i], to + "/" + FilesList[i]))
return false; // Если при копировании произошла ошибка
} else if (fFrom.isFile()) { // Если файл просто копируем его
File fTo = new File(to);
InputStream in = new FileInputStream(fFrom); // Создаем потоки
OutputStream out = new FileOutputStream(fTo);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close(); // Закрываем потоки
out.close();
}
} catch (FileNotFoundException ex) { // Обработка ошибок
} catch (IOException e) { // Обработка ошибок
}
String deleteCmd = "rm -r " + from; //Создаем текстовую командную строку в которой удаляем начальный файл
Runtime runtime = Runtime.getRuntime();
runtime.exec(deleteCmd); //Выполняем удаление с помощью команд
return true; // При удачной операции возвращаем true
}
Код: Выделить всё
//пример:
move("/mnt/sdcard/folder1/a.apk","/mnt/sdcard/folder2/a.apk")
Спасибо: KamiSempai