儲存檔案
Environment
Android 存放檔案的位置分為 內部 和 外部,若希望儲存的文字檔也要供其他 app 可以存取,或是在解除安裝 app 後仍保留下儲存的檔案,則檔案必須存放在外部公共儲存空間。
在 AndroidManifest.xml 加入存取外部儲存空間的權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ... ... <application
... ... public void onbutton1click(View v) { boolean hasExternalStorage = isExternalStorageWritable(); if(hasExternalStorage) { // 目前日期 String dateformat = "yyyyMMdd"; SimpleDateFormat df = new SimpleDateFormat(dateformat); String filename = "tracelog." + df.format(new Date()); Log.d(TAG, "filename == " + filename); File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); File file = new File(path, filename); try { path.mkdirs(); // 老灰鴨的模擬器是 Genymotion // 以 Android Device Monitor 觀察 // 存放檔案位置在 /mnt/shell/emulated/0/Download/ OutputStream os = new FileOutputStream(file, true); // 第二個參數為是否 append // 若為 true,則新加入的文字會接續寫在文字檔的最後 dateformat = "yyyyMMdd kk:mm:ss"; df.applyPattern(dateformat); String string = "Hello world! " + df.format(new Date()) + "\n"; os.write(string.getBytes()); os.close(); } catch (IOException e) { // Unable to create file, likely because external storage is // not currently mounted. Log.w("ExternalStorage", "Error writing " + file, e); } } else Toast.makeText(this,"no Storage",Toast.LENGTH_SHORT).show(); } public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } ... ...
沒有留言:
張貼留言