Can't find the file in the External Directory that my app is creating

android file

84 观看

1回复

354 作者的声誉

I am having trouble finding a .csv file I am creating and writing to in the file explorer once I've connected my Android device to my computer.

I have the WRITE_EXTERNAL_STORAGE in my manifest like so:

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

I am writing to the file using this function in my main activity:

public void exportDatabase() {
    File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
            + "/Folder");
    boolean var = false;
    if (!folder.exists()) {
        Log.d(EXPORT_DATA_TAG, "Folder does not exist");
        var = folder.mkdir();
        Log.d(EXPORT_DATA_TAG, "mkdir() success? " + var);
    }

    CharSequence contentTitle = getString(R.string.app_name);
    final ProgressDialog progDailog = ProgressDialog.show(
            this, contentTitle, "Exporting data...",
            true);
    final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
        }
    };
    final String filename = folder.toString() + "/" + "LeadCapture.csv";
    Log.d(EXPORT_DATA_TAG,"Writing data to file: " + filename);
    new Thread() {
        public void run() {
            boolean success = writeData(filename);
            if (success) {
                handler.sendEmptyMessage(0);
                Log.d(EXPORT_DATA_TAG,"Write successful to .csv");
            } else {
                Log.d(EXPORT_DATA_TAG,"Failed to write to .csv");
            }
            progDailog.dismiss();
        }
    }.start();
}

This calls a write function in my database helper class:

    public boolean writeData(String filename){
    leadDatabase = openOrCreateDatabase(database_name, MODE_PRIVATE, null);
    try {
        FileWriter fw = new FileWriter(filename);
        Cursor cursor = leadDatabase.rawQuery("select * from " + database_name, null);
        fw.append("Index");
        fw.append(',');
        fw.append("BarcodeData");
        fw.append(',');
        fw.append("Notes");
        fw.append(',');
        fw.append('\n');

        if (cursor.moveToFirst()) {
            do {
                fw.append(cursor.getString(0));
                fw.append(',');
                fw.append(cursor.getString(1));
                fw.append(',');
                fw.append(cursor.getString(2));
                fw.append(',');
                fw.append('\n');

            } while (cursor.moveToNext());
        }
        if (cursor != null && !cursor.isClosed()) {
            cursor.close();
        }
        fw.close();
        leadDatabase.close();
        return true;
    } catch (Exception e) {
        Log.d(DATABASE_TAG,"Error: ",e);
        leadDatabase.close();
        return false;
    }
}

The Logcat says that the file is successfully being written to /storage/sdcard1/Download/Folder/LeadCapture.csv, but I can't find the folder or the file in the Downloads folder or anywhere.

I have tried changing

File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

to

File folder = new File(Environment.getExternalStorageDirectory())

This results in this path /storage/sdcard1/Folder/LeadCapture.csv but I am still unable to find the file there. I;m very confused because in most of the other questions about this problem, it has been an issue with not having the WRITE_EXTERNAL_STORAGE permission, them not knowing the filepath, or them writing to Internal memory, none of which is the case here. In theory, even if my writeFunction() isn't correct, it should at least be creating an empty directory that I can see. Any ideas?

作者: person 的来源 发布者: 2017 年 12 月 27 日

回应 1


0

354 作者的声誉

决定

In case anyone else stumble upon this: there's a delay between when a file is created on a device and when it will show up. The MediaScanner has to scan new files for them to show up, and it only runs every so often, or when the device resets. I added the following to my app to trigger a Media Scan as soon as I was done writing the file:

                String[] files = { filename };
                MediaScannerConnection.scanFile(getApplicationContext(), files, null, null);
作者: person 发布者: 2018 年 1 月 2 日
32x32