новый файл (путь) всегда фактически создает файл на Android?

Я пытаюсь проверить, выходит ли файл на SD-карту Android... поэтому я делаю:

File f=new File(sdpath + "/" + DATABASE_NAME); //   
if(!f.exits()) {
...create new file..
}
else {
...do something...
}

Каждый раз, когда это фактически создает каталог или файл на SD-карте.

Я знаю, что его не существует, и когда новый файл выполняется, он создается, а этого не должно быть?

Я читал в Google, что новый файл не создает фактический файл в файловой системе, но в моем случае это делает...

Любые альтернативы проверке выхода из файла/каталога без использования нового файла.

Редактировать 1: Ну, я просто хотел бы добавить (через 4 года :)), что эта проблема возникла только на двух устройствах в то время, когда я писал пост, и никогда больше, одним из них был HTC Desire C с Android 4.0 и другой был какой-то Huawei с android 2.x, уже не помню.


person JanBo    schedule 11.04.2013    source источник


Ответы (4)


По какой-то странной причине оказалось, что новый файл каждый раз создавал каталог...

вместо проверки if (!f.exists()) я изменил его на проверку if (!f.isFile())

В этом случае я создаю новый файл, и он работает хорошо, в следующий раз, когда я запускаю его, файл уже находится на SD-карте...

person JanBo    schedule 11.04.2013

Способ, который работал, был почти таким же, как у вас:

File f = new File(Environment.getExternalStorageDirectory(), "a directory");
if(!f.exists){
// do something
}

и проверить, существует файл или нет, почти так же:

File f = new File(Environment.getExternalStorageDirectory() + "/a directory/" + "a file");
if(!f.exists){
// do something
}

Я надеюсь, что это может помочь вам, потому что это не создало файл или каталог в моем приложении. Только что проверил путь.

person user    schedule 11.04.2013
comment
Это все еще то же самое, что и я ... Каждый раз, когда я помещаю новый файл (что-то), он создает каталог с этим именем. - person JanBo; 11.04.2013

это может вам помочь, попробуйте

if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
                    //handle case of no SDCARD present
                } else {
                    File file = new File(Environment.getExternalStorageDirectory()
                         +File.separator
                         +"myDirectory" //folder name
                         +File.separator
                         +"myFile.example"); //file name

                    if(file.exists()){
                        Toast.makeText(MainActivity.this, "Not Create ", 12).show();
                    }else{
                        file.mkdirs();
                        Toast.makeText(MainActivity.this, "Create ", 12).show();
                    }

                }
person Ankitkumar Makwana    schedule 11.04.2013
comment
Мой sdpath устроен таким образом, поэтому я уже сделал это :( - person JanBo; 11.04.2013

Попробуй это

    File[] files = filedir.listFiles();
    for (File file2 : files) {
        if (file2.isDirectory()) {
            Toast.makeText(this, "directory", Toast.LENGTH_LONG).show();
        } else {  
            if (file2.getName().equals(DATABASE_NAME)) {
                Toast.makeText(this, "File found",Toast.LENGTH_LONG).show();
            }
          else{Toast.makeText(this, "File not found",Toast.LENGTH_LONG).show();
        }
}
}
person Abx    schedule 11.04.2013