正在学习android的数据存储,记录分享如下:


效果图如下



内部存储

To create and write a private file to the internal storage:


CallopenFileOutput()with the name of the file and the operating mode. This returns a FileOutputStream.

Write to the file withwrite().
Close the stream withclose().


To read a file from internal storage:


CallopenFileInput()and pass it the name of the file to read. This returns a FileInputStream.

Read bytes from the file with read().
Then close the stream with close().

外部


和内部相比 有几点不同

1.查看外部存储设备是否可用,getExternalStorageState()

2.在清单文件中要加上读写外部存储的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3.指定具体的存储路径,比如用绝对存储路径

File newfile =new File(dir.getAbsolutePath() + "/" + exFileName);




主要代码如下【仅供参考】

public class MainActivity extends ActionBarActivity {private static final String FILE_NAME = "fileInDome.txt";private static final String TAG = "com.example.filestorage.MainActivity";private EditText etInput;private EditText etContent;private static boolean isRbIn = true;private String exFileName = "fileExDome.txt";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etInput = (EditText) findViewById(R.id.et_files);etContent = (EditText) findViewById(R.id.et_content);Button btRead = (Button) findViewById(R.id.bt_read);Button btWrite = (Button) findViewById(R.id.bt_write);btRead.setOnClickListener(new btClickListener());btWrite.setOnClickListener(new btClickListener());}private class btClickListener implements OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.bt_read:read_files();break;case R.id.bt_write:write_files();break;default:break;}}}public void read_files() {if (isRbIn) {FileInputStream fis = null;try {fis = openFileInput(FILE_NAME);if (fis.available() == 0)return;byte[] readBytes = new byte[fis.available()];while (fis.read(readBytes) != -1);String readContent = new String(readBytes);etContent.setText(readContent);Toast.makeText(this, "文件读取成功,文件长度为:" + readContent.length(), 0).show();fis.close();} catch (Exception e) {e.printStackTrace();}} else {// 外部存储FileInputStream fis =null;Log.i(TAG, "读取外部存储 isExternalStorageWritable");if (isExternalStorageWritable()) {File dir = new File("/sdcard/");Log.i(TAG, "读取外部存储 /sdcard/");if(dir.exists() && dir.canWrite()){Log.i(TAG, "读取外部存储");try {fis = new FileInputStream(dir.getAbsolutePath() + "/" + exFileName);if(fis.available() == 0)return;Log.i(TAG, "" + fis.available());byte[] readBytes =new byte[fis.available()];while(fis.read(readBytes) !=-1);String readContent =new String(readBytes);etContent.setText(readContent);Toast.makeText(this,"从SD卡读取成功,文件长度为:" + readContent.length(), 0).show();etInput.setText("");fis.close();} catch (Exception e) {e.printStackTrace();}}} else {Toast.makeText(this, "外部存储不可写", 0).show();}}}public void write_files() {if (isRbIn) {FileOutputStream fos = null;try {// 内部存储fos = openFileOutput(FILE_NAME, MODE_PRIVATE);String text = etInput.getText().toString();fos.write(text.getBytes());Toast.makeText(this, "文件写入成功,文件长度为:" + text.length(), 0).show();etInput.setText("");} catch (Exception e) {e.printStackTrace();} finally {if (fos != null) {try {fos.flush();fos.close();} catch (Exception e2) {e2.printStackTrace();}}}} else {// 外部存储FileOutputStream fos =null;Log.i(TAG, "写入外部存储 isExternalStorageWritable");if (isExternalStorageWritable()) {File dir = new File("/sdcard/");Log.i(TAG, "写入外部存储 /sdcard/");if(dir.exists() && dir.canWrite()){Log.i(TAG, "写入外部存储");File newfile =new File(dir.getAbsolutePath() + "/" + exFileName);try {fos = new FileOutputStream(newfile);String text = etInput.getText().toString();fos.write(text.getBytes());Toast.makeText(this,"文件写入SD卡成功,文件长度为:" + text.length(), 0).show();etInput.setText("");fos.close();} catch (Exception e) {e.printStackTrace();}}} else {Toast.makeText(this, "外部存储不可写", 0).show();}}}/* Checks if external storage is available for read and write */public boolean isExternalStorageWritable() {String state = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(state)) {return true;}return false;}public void onRadioButtonClicked(View view) {switch (view.getId()) {case R.id.rb_in:Log.i(TAG, "内部存储");isRbIn = true;break;case R.id.rb_ex:Log.i(TAG, "外部存储");isRbIn = false;break;default:break;}}}


参考 https://developer.android.com/

更多相关文章

  1. Android中的资源文件
  2. Android(安卓)文件存储及常见问题解决
  3. android 异常 Unable to instantiate activity ComponentInfo
  4. Android(安卓)Mediacodec H.265文件播放
  5. Android(安卓)zip文件压缩解压缩
  6. android读取ini文件
  7. Android下载文件保存到路径
  8. Android中FTP上传、下载
  9. NPM 和webpack 的基础使用

随机推荐

  1. Android事件机制之二:onTouch详解
  2. Android中传感器Sensor的使用
  3. Andriod 环境配置以及第一个Android Appl
  4. android 调用系统相机拍照并保存照片原图
  5. Android系统的开机画面显示过程分析(11)
  6. Android(安卓)Textview实现文字颜色渐变
  7. Android(安卓)javah -jni 找不到类的解决
  8. android studio中光线传感器解析
  9. Android(安卓)ViewPager的初始化及遇到的
  10. [Android] 输入法的开发