#android #file
#Android #файл
Вопрос:
Я попытался создать файл, используя java.io.File
класс со следующим набором кодов:
1) с File(String path)
:
String filePath = "/mnt/sdcard/myfolder/Log_201406130608.dat";
File dirMediaFile = new File(filePath); // Folder created at this point with "Log_201406130608.dat" name.
if(!dirMediaFile.exists())
{
dirMediaFile.createNewFile();
}
2) с File(File dir, String name)
String dirPath = "/mnt/sdcard/myfolder";
File dirFile = new File(dirPath);
if(!dirFile.exists())
{
dirFile.mkdir();
}
downloadingMediaFile = new File(dirFile, "Log_201406130608.dat"); // Folder created at this point with "Log_201406130608.dat" name.
if(!downloadingMediaFile.exists())
{
downloadingMediaFile.createNewFile();
}
Я не могу понять, в чем проблема? пожалуйста, помогите мне выяснить причину этой проблемы.
Комментарии:
1. Какой результат вы получили? Есть ли ошибка (вывод Logcat)? Убедитесь, что у вас есть право на «WRITE_EXTERNAL_STORAGE» в вашем манифесте.
2. @Guian Нет ошибки в Logcat во время выполнения этого кода. Единственная проблема заключается в том, почему ОС создает каталог вместо файла. Есть ли какие-либо проблемы с соглашением об именовании файла??
Ответ №1:
Не существует такого имени файла, которое создавало бы для вас каталог вместо файла, так что нет, это не проблема с именами.
Хотя пути жесткого кодирования работают на большинстве устройств, это плохой метод.
final String dirPath = "/mnt/sdcard/myfolder";
Получите путь, Envorinment
указанный ниже
Вероятно, раньше вы создавали каталог по ошибке.
После исправления кода каталог не удаляется.
Должно сработать следующее.
final File dirFile = new File(Environment.getExternalStorageDirectory(), "myfolder");
if (dirFile.exists() amp;amp; !dirFile.isDirectory()) {
dirFile.delete();
}
if (!dirFile.exists()) {
dirFile.mkdirs(); //mkdirs creates any previous directory, if not created before
}
downloadingMediaFile = new File(dirFile, "Log_201406130608.dat");
if (downloadingMediaFile.exists() amp;amp; !downloadingMediaFile.isFile()) [
// not a file, delete
downloadingMediaFile.delete();
}
if (!downloadingMediaFile.exists())
{
downloadingMediaFile.createNewFile();
}
Комментарии:
1. Или просто попробуйте удалить каталог «Log_201406130608.dat» перед повторным запуском вашего кода, чтобы убедиться, что его там раньше не было ^^
2. @DevK вы пробовали запускать отладчик, чтобы увидеть, в какой момент каталог действительно создан? Вы уверены, что где-то еще нет аналогичного кода, который вызывается после и вместо этого создает каталог?
3. Каталог @DoctororDrive создается после этой строки: downloadingMediaFile = новый файл (dirFile, «Log_201406130608.dat»); И нет никакого другого кода, который создаст этот каталог. И еще одна вещь заключается в том, что эта строка «downloadingMediaFile.delete();» не удаляет каталог, который уже был создан.
4. @DevK что-то не так.
downloadingMediaFile = new File(dirFile, "Log_201406130608.dat");
не выполняет никаких операций записи.File
конструктор просто создает объект указателя файла. Кроме того, вы уверены, что каталог, который вы видите, называется точно «Log_201406130608.dat» (а не другие номера)?