Android 文件的保存与读取之SDCard(SD卡)存储
16lz
2021-01-23
Android钟对数据的存储与访问是很有必要的,在Android中对于数据存储提供了如下几种方法:
文件形式
SharedPreferences(参数-键值对形式)
SQLite数据库(空间2T)
Content provider (Android组件-内容提供者)
网络(云存储)
现在我们主要写的是文件的保存与读取。
Android文件储存数据有两个地方:1、Android系统自带的存储空间,2、外部储存设备(SD等)
写的是第二种SDCard(SD卡)存储:
JAVA代码:
1、Activity类代码:
package com.example.administrator.foundationdemo.file;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.example.administrator.foundationdemo.R;public class FileActivity extends AppCompatActivity { private EditText file_name_edittext; private EditText file_text_edittext; private Button file_writing_button; private Button file_read_button; private TextView file_read_text; FileService fileService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_file); file_name_edittext = (EditText) findViewById(R.id.file_name_edittext); file_text_edittext = (EditText) findViewById(R.id.file_text_edittext); file_writing_button = (Button) findViewById(R.id.file_writing_button); file_read_button = (Button) findViewById(R.id.file_read_button); file_read_text = (TextView) findViewById(R.id.file_read_text); fileService = new FileService(FileActivity.this); //数据保存按钮 file_writing_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String fileName = file_name_edittext.getText().toString(); String fileText = file_text_edittext.getText().toString(); try { //判断SDCard是否存在并且可写 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ fileService.saveToSDCard(fileName,fileText); Toast.makeText(FileActivity.this,"保存成功",Toast.LENGTH_LONG).show(); }else { Toast.makeText(FileActivity.this,"SDCard不存在或不可写",Toast.LENGTH_LONG).show(); } } catch (Exception e) { Toast.makeText(FileActivity.this,"保存失败",Toast.LENGTH_LONG).show(); e.printStackTrace(); } } }); //数据读取按钮 file_read_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String fileName = file_name_edittext.getText().toString(); try { file_read_text.setText(fileService.read(fileName)); } catch (Exception e) { e.printStackTrace(); } } }); }}
FileService类代码:
package com.example.administrator.foundationdemo.file;import android.content.Context;import android.os.Environment;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;/** * Created by Administrator on 2016/11/30. */public class FileService { Context context; public FileService(){ } public FileService(Context context){ this.context = context; } /**Android自带内存的文件储存 * * @param fileName 文件名称 文件类容 * @param fileText * @throws Exception */ public void writing(String fileName, String fileText) throws Exception{ //默认保存路径../data/date/package name/file目录下 //Android还提供了两种方法getCacheDir()和getFilesDir()方法: //getCacheDir()方法用于获取/data/data//cache目录 //getFilesDir()方法用于获取/data/data//file目录 //openFileOutput(Sting ,int) 快速获取一个输出流,Sting==>文件名称,int操作模式(可看源码信息) //Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被该应用访问,在该模式下,写入的内容会覆盖源文件的内容; //Context.MODE_APPEND:为追加操作模式,代表该文件是私有的,只能够被该应用访问,在该模式下,写入的内容追加在源文件内容的后面; ////还有一种追加方式为FileoutputStream中的两个参数(String name,boolean append)其中第二个参数决定是否以追加的模式来写入内容; //Context.MODE_READABLE:表示当前文件能被其他应用读取; // Context.MODE_WRITEABLE:表示当前文件能被其他应用写入; FileOutputStream fileOutputStream = context.openFileOutput(fileName,Context.MODE_PRIVATE); fileOutputStream.write(fileText.getBytes()); fileOutputStream.close(); } /**将文件存放在SDCard * 需要权限 * 在SDCard中创建与删除文件权限 * * 往SDCard写入数据权限 * * @param fileName 文件名称 * @param fileText 文件内容 * @throws Exception */ public void saveToSDCard(String fileName, String fileText) throws Exception{ //第一个参数方法为获取SDCard目录 File file = new File(Environment.getExternalStorageDirectory(),fileName); FileOutputStream outputStream = new FileOutputStream(file); outputStream.write(fileText.getBytes()); outputStream.close(); } public String read(String fileName) throws Exception{ //默认读取路径../data/date/package name/file目录下 FileInputStream fileInputStream = context.openFileInput(fileName); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fileInputStream.read(buffer)) != -1){ outputStream.write(buffer,0,len); } return new String(outputStream.toByteArray()); }}
XML代码:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".file.FileActivity"> <EditText android:id="@+id/file_name_edittext" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:hint="请输入文件名称"/> <EditText android:id="@+id/file_text_edittext" android:layout_width="match_parent" android:layout_height="wrap_content" android:minLines="3" android:hint="请输入文件内容"/> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/file_writing_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存"/> <Button android:id="@+id/file_read_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读取"/> LinearLayout> <TextView android:id="@+id/file_read_text" android:layout_width="match_parent" android:layout_height="wrap_content" />LinearLayout>
效果图:
希望对你们有帮助!!!!!
更多相关文章
- HNU_团队项目_Android和数据库对接出现问题总结
- Android Studio共用Eclipse的Android项目文件
- Android布局文件中命名空间的解析
- Android中数据存储——SQLite数据库存储数据
- [导入]2010-03-02 传智播客—Android(四)数据存储之五网络
- 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持
- android中解析文件的三种方式
- Android存储数据的三种方式