儲存檔案
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;
- }
- ...
- ...
沒有留言:
張貼留言