Stack Overflow на русском Asked by hawkkiller on November 20, 2021
Поменять местами содержимое файлов. Имеется код:
perform.setOnClickListener {
val path1 = File(
Environment.getExternalStorageDirectory(),
"$filepath")
val path2 = File(
Environment.getExternalStorageDirectory(),
"$filepath2")
val fileExists1 = path1.exists()
val fileExists2 = path2.exists()
if(fileExists1) {
}
else filepath.setText("error", TextView.BufferType.EDITABLE)
if(fileExists2) {
}
else filepath2.setText("error", TextView.BufferType.EDITABLE)
}
Для обмена значений переменных существует еще и арифметический метод, без использования дополнительной переменной:
a = a + b;
b = a - b;
a = a - b;
К сожалению, к файлам такая простая арифметика не применима, если только не использовать некие низкоуровневые аналоги указателей для файловых систем...
Answered by serg.tortilliani on November 20, 2021
Если файлы расположены в одном разделе ФС (Environment.getExternalStorageDirectory()
в обоих случаях намекает что так и есть), можно переименовать:
val path1 = File(
Environment.getExternalStorageDirectory(),
"$filepath")
val path2 = File(
Environment.getExternalStorageDirectory(),
"$filepath2")
// здесь проверки исходных файлов
// ....
// мы не можем сразу переименовать один файл в другой, так как он существует
// поэтому должны освободить одно имя
// для этого создаём временное имя и переименовываем первый в него
val tempPath = File(Environment.getExternalStorageDirectory(), "_tmp")
path1.renameTo(tempPath)
// второй в первый
path2.renameTo(path1)
// временный во второй
tempPath.renameTo(path2)
Все проверки оставляю на вашей совести
Если в разных разделах - тогда только копировать.
Принцип тот же: через временный файл, но если файлы не большие, то можно без него - загрузить оба в оперативную память и записать наоборот.
Answered by woesss on November 20, 2021
Алгоритм обмена значениями двух переменных при помощи вспомогательной:
tmp = a;
a = b;
b = tmp;
Предположим есть некие функции:
String NameOf (File file); (* возвращает имя файла *)
void Rename (File file, String name); (* переименовывает файл *)
Алгоритм обмена содержимого файлов будет будет аналогичен вышеприведенному:
String name1 = NameOf (file1);
Rename (file1, NameOf (file2));
Rename (file2, name1);
Answered by serg.tortilliani on November 20, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP