android-数据存储,【Android】数据存储之文件存储

本文介绍了Android的数据存储方式,包括内部存储和外部存储。内部存储将数据以文件形式存于设备内存,为应用私有;外部存储将文件存于外围设备,可被共享但有安全隐患。文中给出了两种存储方式的读写示例代码,还展示了简单内部存储案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内部存储,将应用程序的数据以文件的方式存储到设备内存中,被其所创建的应用程序私有,应用程序卸载后也随之被删除。其他程序访问时需要权限。内部存储使用的是Context提供的openFileOutput()方法和openFileInput()方法,通过这两个方法可以分别获取FileOutputStream对象和FileInputStream对象,具体如下:

FileOutputStream openFileOutput(String name,int mode);

FileInputStream openFileInput(String name);

上述两个方法中,openFileOutput()用于打开应用程序中对应的输入流,将数据存储到指定的文件中;openFileInput()用于打开应用程序对应的输入流,用于从文件中读取数据。其中,参数name表示文件名,mode表示文件的操作模式,也就是读写文件的方式,例如:MODE_PRIVATE,当前程序私有;MODE_APPEND,该文件内容可追加。存储数据时,使用FileOutputStream对象将数据存储到文件中的示例代码如下:

String fileName="data.txt"; //文件名称

String content="helloworld"; //保存数据

FileOutputStream fos;

try {

fos=openFileOutput(fileName,MODE_PRIVATE);

fos.write(content.getBytes());

fos.close();

}catch(Exception e){

e.printStackTrace();

}

取出数据时,使用FileInputStream对象读取数据的示例代码如下:

String content="";

FileInputStream fis;

try{

fis=openFileInput("data.txt"); //获取到文件的输入流对象

byte[] buffer=new byte[fis.available()];

fis.read(buffer);

content=new String(buffer);

} catch(Exception e ) {

e.printStackTrace();

}

外部存储

外部存储,是指将文件存储到一些外围设备上,例如SD卡或者内嵌的存储卡,属于永久性的存储方式。外部存储的文件可以被其他应用程序所共享,当将外围设备连接到计算机时,这些文件可以被浏览、修改和删除,因此这种方式存在安全隐患。

因为外围设备可能被移除,丢失或者处于其他状态,因此在使用外围设备之前必须使用Environment.getExternalStorageState()方法来确认外围设备是否可用,当外围设备可用且有读写权限时,就可以通过FileInputStream、FileOutputStream或者FileReader、FileWriter对象来读写外围设备中的文件。向外围设备中存储数据的示例代码如下所示:

String state=Environment.getExternalStorageState();

if (state.equals(Environment.MEDIA_MOUNTED)){

File SDPath=Environment.getExternalStorageDirectory();

File file=new File(SDPath,"data.txt");

String data="HelloWorld";

FileOutputStream fos;

try {

fos=new FileOutputStream(file);

fos.write(data.getBytes());

fos.close();

} catch(Exception e){

e.printStackTrace();

}

}

上述代码中,使用到了Environmen.getExternalStorageDirectory();方法,该方法用于获取SD卡的根路径。手机厂商不同SD卡根目录可能不一致,用这种方法可以避免把路径写死而找不到SD卡。从外围设备中读取数据的示例代码如下所示:

String state=Environment.getExternalStorageState();

if (state.equals(Environment.MEDIA_MOUNTED)){

File SDPath=Environment.getExternalStorageDirectory();

File file=new File(SDPath,"data.txt");

FileInputStream fis;

try {

fis=new FileInputStream(file);

BufferedReader br=new BufferedReader(new InputStreamReader(fis));

String data=br.readLine();

fis.close();

} catch(Exception e){

e.printStackTrace();

}

}

读取外围设备中的数据时,同样需要判断外围设备是否可以及是否具有读写权限,然后通过FileInputStream对象读取指定目录下的文件。

需要注意的是,Android系统为了保证应用程序的安全性做了相关的规定,如果程序需要访问系统的一些关键信息,必须要在清单文件中声明权限才可以,否则程序运行时会直接崩溃。这里操作SD卡中的数据就是系统中比较关键的信息,因此需要在清单文件的节点下配置权限信息,具体代码如下所示:

上述代码制定了SD卡具有可读和可写的权限,因此应用程序可以操作SD卡中的数据。

简单内部存储案例展示

代码展示:

public class MainActivity extends Activity {

private EditText et_info;

private Button btn_save;

private Button btn_read;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取布局文件中的控件

et_info = (EditText) findViewById(R.id.et_info);

btn_save = (Button ) findViewById(R.id.btn_save);

btn_read = (Button) findViewById(R.id.btn_read);

//传入实现了OnClickListener接口的类的对象

btn_save.setOnClickListener(new ButtonListener());

btn_read.setOnClickListener(new ButtonListener());

}

//定义Button按钮的点击事件

private class ButtonListener implements OnClickListener{

@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.btn_save:

String saveinfo = et_info.getText().toString().trim();

FileOutputStream fos;

try{

//保存数据,内部存储形式

fos = openFileOutput("data.txt",Context.MODE_APPEND);

fos.write(saveinfo.getBytes());

fos.close();

}

catch(Exception e){

e.printStackTrace();

}

Toast.makeText(MainActivity.this, "数据保存成功", 0).show();

break;

case R.id.btn_read:

String content = "";

try{

//获取保存的数据

FileInputStream fis = openFileInput("data.txt");

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

content = new String(buffer);

fis.close();

}

catch(Exception e){

e.printStackTrace();

}

Toast.makeText(MainActivity.this, "保存的数据是:"+content, 0).show();

break;

default:

break;

}

}

}

界面展示:

输入数据界面

0818b9ca8b590ca3270a3433284dd417.png

点击保存数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值