2017-12-27 400 views
0

我无法找到一个.csv文件,该文件是在将我的Android设备连接到我的计算机后,在文件资源管理器中创建并写入的。在我的应用程序创建的外部目录中找不到该文件

我有WRITE_EXTERNAL_STORAGE在我的表现像这样:

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(); 
} 

这需要在写功能:

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

我用我的主要活动此功能写入文件我的数据库帮助类:

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; 
    } 
} 

Logcat表示该文件已成功写入/storage/sdcard1/Download/Folder/LeadCapture.csv,但我无法在Downloads文件夹或任何位置找到该文件夹​​或文件。

我试图改变

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

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

这导致这条道路/storage/sdcard1/Folder/LeadCapture.csv,但我仍然无法找到该文件。我非常困惑,因为在关于这个问题的大多数其他问题中,它没有WRITE_EXTERNAL_STORAGE权限,他们不知道文件路径,或者他们写入内部存储器,这里没有一个是这种情况。理论上,即使我的writeFunction()不正确,它至少应该创建一个我可以看到的空目录。有任何想法吗?

+1

https://stackoverflow.com/questions/32789157/how-to-write-files-to- external-public-storage-in-android-so-that-they-are-visibl – CommonsWare

+0

你给你阅读权限吗? – ABDevelopers

+0

'var = folder.mkdir()'。如果mkdirs()失败,则不应继续。更好:'if(!folder.mkdir()){Toast(...);返回;}'。然后你不会抱怨你无法创建一个文件。但是一个目录。 – greenapps

回答

0

如果有其他人遇到这种情况:在设备上创建文件时出现延迟时间。 MediaScanner必须扫描新文件才能显示出来,并且只能每隔一段时间运行一次,或者设备重置时才运行。添加以下到我的应用程序,尽快触发介质扫描,因为我是做写入文件:

   String[] files = { filename }; 
       MediaScannerConnection.scanFile(getApplicationContext(), files, null, null); 
相关问题