Создает папку вместо файла

#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» (а не другие номера)?