我想創建一個目錄,然後將數據寫入外部SD卡上的新文件。我之前已經成功地將文件寫入內部存儲器,但是由於這只是我的第二個應用程序,所以我似乎遇到了2個問題(除了我自己之外)。創建文件夾並將文件寫入外部存儲
已經搜索到的關於計算器的意見和示例代碼長度,我已經建立了以下方法:
void filewriter(String fnam,String mdata){
if (useSD) {
//test to see if a directory called AMJ exists on external storage and create one if it does not
try {
File folder = new File(Environment.getExternalStorageDirectory() + "/AMJ");
if (folder.exists() && folder.isDirectory()) {
Toast.makeText(getApplicationContext(), "folder " + folder + " exists", Toast.LENGTH_LONG).show(); //##1
} else {
Toast.makeText(getApplicationContext(), "folder " + folder + " does not exist", Toast.LENGTH_LONG).show(); //##2
folder.mkdirs();
}
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Unable to find or create a directory for route data on SD card", Toast.LENGTH_LONG).show(); //##3
}
//create a file with file name fnam and write String mdata into the AMJ directory
try {
String namFile = Environment.getExternalStorageDirectory() + "/AMJ/" + fnam;
File datfile = new File(namFile);
Toast.makeText(getApplicationContext(), "File is: " + datfile, Toast.LENGTH_LONG).show(); //##4
datfile.createNewFile();
FileOutputStream fOut = new FileOutputStream(datfile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(fOut);
myOutWriter.append(mdata);
myOutWriter.close();
fOut.close();
Toast.makeText(getApplicationContext(), "Finished writing to SD", Toast.LENGTH_LONG).show(); //##5
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Write failure", Toast.LENGTH_SHORT).show(); //##6
}
}
}
fnam和MDATA是簡單的文本,如「MYFILE」和「這是我的測試數據」。
第一個問題是,我第一次運行這個時,我得到了祝酒信息## 2(文件夾不存在),如我所料。但是,我期望創建一個AMJ目錄,以便下次運行代碼時我會得到消息## 1來表示該目錄現在存在,但這不會發生 - 它仍然表示該目錄不存在。
第二個問題(當然可能只是第一個問題的結果)是文件創建/寫入不起作用,每次都會收到'catch'消息## 6。
我的清單看起來是這樣的:
package="com.example.chris.filewritetests">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我在Android模擬器工作室運行此。
有誰能告訴我這裏有什麼問題嗎?
擺脫所有的「敬酒」。使用'Log.e()'將消息記錄到LogCat中,特別是記錄你在'catch'塊中獲得的特定異常。此外,沒有'android.permission.STORAGE'權限,您可能沒有[運行時權限]的代碼(https://developer.android.com/training/permissions/requesting.html),您最終可能希望[獲取此文件索引,以便它顯示爲用戶](https://stackoverflow.com/questions/32789157/how-to-write-files-to-external-public-storage-in-android-so-that-他們,是-visibl)。 – CommonsWare