2017-12-27 891 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); 
相關問題