file.exists() always returns true no matter what

Issue

I have this function that searches a directory for a file based on a given filename. My problem is that it always returns true (file exists) no matter what.

Here’s the function:

public boolean searchFile(String name) {
    File localStorage = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
    String storagePath = localStorage.getAbsolutePath();
    String rootPath = storagePath + "/App";
    String fileName = "/" + name + fileExtention;
    File root = new File(rootPath);
    if(!root.mkdirs()) {
        Log.i("test", "This path is already exist: " + root.getAbsolutePath());
    }
    File f = new File(rootPath + fileName);
    try {
        if (getActivity() != null) {
            int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
            if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                if (f.exists()) {
                    Log.i("test", "This file is already exist: " + f.getAbsolutePath());
                    return true;
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

This doesn’t really make sense as I read that File f = new File(blah) only creates an Object of the File and doesn’t actually create the file in the storage.

Solution

Please find the function below, you can map it to fit your situation. I am using Java NIO. I have also suppressed all warnings @SuppressLint("NewApi")(this is not a must, suppressing the warnings that is)

Java Code

import android.annotation.SuppressLint;
import android.util.Log;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileExistAlwaysReturnsTrue {

    Path path;
    String LOG_TAG = "Files_Log";

    @SuppressLint("NewApi")
    boolean fileExists(String filePath /*Set the file path here*/) {

        /* Sample filePath: /data/data/com.package/cache/WebView/font_unique_name_table.pb */

        try {
            path = Paths.get(filePath);
            if (Files.exists(path)) {
                return true; /* File exists */
            } else {
                return false; /* File does exists */
            }
        } catch (Exception e) {
            Log.d(LOG_TAG, e.getMessage());
        }
        return false;
    }


}

Permissions

Ensure you have the following permission.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Regards

Answered By – Osoro

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published