Android: 写文件到SD卡
考虑到SD卡可能没有被mount,或者其他各种情况,操作SD卡上的文件总需要各种状态的判断。主要是使用Environment类里的一些接口进行判断:
private void writeFileToSD() { String sdStatus = Environment.getExternalStorageState(); if(!sdStatus.equals(Environment.MEDIA_MOUNTED)) { Log.d("TestFile", "SD card is not avaiable/writeable right now."); return; } try { String pathName="/sdcard/test/"; String fileName="file.txt"; File path = new File(pathName); File file = new File(pathName + fileName); if( !path.exists()) { Log.d("TestFile", "Create the path:" + pathName); path.mkdir(); } if( !file.exists()) { Log.d("TestFile", "Create the file:" + fileName); file.createNewFile(); } FileOutputStream stream = new FileOutputStream(file); String s = "this is a test string writing to file."; byte[] buf = s.getBytes(); stream.write(buf); stream.close(); } catch(Exception e) { Log.e("TestFile", "Error on writeFilToSD."); e.printStackTrace(); } } private void writeFile() { try { FileOutputStream stream = openFileOutput("testfile.txt", Context.MODE_WORLD_WRITEABLE); String s = "this is a test string writing to file."; byte[] buf = s.getBytes(); stream.write(buf); stream.close(); } catch (FileNotFoundException e) { Log.d("TestFile", "File not found."); } catch (IOException e) { Log.d("TestFile", "File write error."); } } void startWatchingExternalStorage() { mExternalStorageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.i("test", "Storage: " + intent.getData()); updateExternalStorageState(); } }; IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_MEDIA_MOUNTED); filter.addAction(Intent.ACTION_MEDIA_REMOVED); registerReceiver(mExternalStorageReceiver, filter); updateExternalStorageState(); } void stopWatchingExternalStorage() { unregisterReceiver(mExternalStorageReceiver); }