Android 内部存储使用详解
Android 可以直接保存文件到内部存储,保存在内部存储的文件是应用的私有文件,其他应用无法访问,当app被卸载时候,文件也会被删除掉。内部存储经常以文件的形式保存。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
通过本章将了解Android 内部存储相关的知识点如下:
1. 内部存储的保存路径
2. 内部存储的(保存,读取)使用方法
3. 内部存储的Demo
4. 内部存储的其他方法
1. 内部存储的保存路径
/data/data/com.**包名/files/文件名
2. 内部存储的(保存,读取)使用方法
-
- 保存文件的方法
1.使用文件名称和操作模式调用 openFileOutput()。 这将返回一个 FileOutputStream。
2.使用 write() 写入到文件。
3.使用 close() 关闭流式传输。
例如:
// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
// 保存在手机内部存储中
try {
// 打开输出流,并创建文件
FileOutputStream fos = openFileOutput(strfilename, MODE_PRIVATE);
// 输入的内容保存到文件中
fos.write(str.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
-
- 读取 File 内容的方法
- 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream。
- 使用 read() 读取文件字节。
- 然后使用 close() 关闭流式传输。
例如:
try {
// 打开文件得到一个只读的输入流,
FileInputStream fis = openFileInput(filename);
// 将文件内容存放的byte数组中
byte[] buffer = new byte[fis.available()];
// 读取数组中的内容
fis.read(buffer);
fis.close();
// 将数组内容存放到字符串中,并显示出来
etcontent.setText(new String(buffer));
} catch (Exception e) {
e.printStackTrace();
}
- 3.删除文件的方法
String filename;
deleteFile(filename);
3. 内部存储的Demo
- 实现效果如下:
实现文件的保存、读取、删除功能
内部存储使用Demo
- 实现代码如下:
public class FileMethods extends Activity implements OnClickListener {
/*
* 内部存储的方法FileOutputStream(filename, MODE_PRIVATE);
* FileInputStream(filename); deleteFile(filename); 文件保存位置:
* /data/data/包名/files/文件名 内部存储的特点: 内部存储里的东西会随着app的卸载而清掉
*
* *
*/
private EditText etname, etcontent;
private Button savebtn, openbtn, deletebtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file);
InitView();
}
private void InitView() {
etname = (EditText) findViewById(R.id.editfilename);
etcontent = (EditText) findViewById(R.id.edit_filecontext);
savebtn = (Button) findViewById(R.id.savefile);
openbtn = (Button) findViewById(R.id.openfile);
deletebtn = (Button) findViewById(R.id.deletefile);
savebtn.setOnClickListener(this);
openbtn.setOnClickListener(this);
deletebtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.savefile:
SaveFile();
break;
case R.id.openfile:
OpenFile();
break;
case R.id.deletefile:
DeleteFile();
break;
default:
break;
}
}
// 保存文件方法
private void SaveFile() {
String filename = etname.getText().toString().trim();
String filecontent = etcontent.getText().toString().trim();
if (TextUtils.isEmpty(filename) || TextUtils.isEmpty(filecontent)) {
Toast.makeText(getApplicationContext(), "文件名不能为空",
Toast.LENGTH_LONG).show();
return;
}
// 打开一个用来读写的文件,该文件与当前上下文所在的包相关,调用该方法不需要添加任何全选,
// 保存在手机内部存储中
try {
// 打开输出流,并创建文件
FileOutputStream fos = openFileOutput(filename, MODE_PRIVATE);
// 输入的内容保存到文件中
fos.write(filecontent.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG)
.show();
etname.setText("");
etcontent.setText("");
}
// 打开文件方法
private void OpenFile() {
String filename = etname.getText().toString().trim();
if (TextUtils.isEmpty(filename)) {
Toast.makeText(getApplicationContext(), "文件名不能为空",
Toast.LENGTH_LONG).show();
return;
}
try {
// 打开文件得到一个只读的输入流,
FileInputStream fis = openFileInput(filename);
// 将文件内容存放的byte数组中
byte[] buffer = new byte[fis.available()];
// 读取数组中的内容
fis.read(buffer);
fis.close();
// 将数组内容存放到字符串中,并显示出来
etcontent.setText(new String(buffer));
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除文件方法
private void DeleteFile() {
String filename = etname.getText().toString().trim();
if (TextUtils.isEmpty(filename)) {
Toast.makeText(getApplicationContext(), "文件名不能为空",
Toast.LENGTH_LONG).show();
return;
}
// 删除上下文中指定名称的文件,
boolean deletefile = deleteFile(filename);
if (deletefile) {
Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG)
.show();
}
}
}
- 实现布局 如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/editfilename"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:background="@android:drawable/edit_text"
android:hint="请输入文件名"
android:padding="5dp"
android:textSize="20sp" />
<Button
android:id="@+id/savefile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:padding="5dp"
android:text="保存"
android:textSize="25sp" />
<Button
android:id="@+id/openfile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:padding="5dp"
android:text="打开"
android:textSize="25sp" />
</LinearLayout>
<Button
android:id="@+id/deletefile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="5dp"
android:text="删除文件"
android:textSize="25sp" />
<EditText
android:id="@+id/edit_filecontext"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@android:drawable/edit_text"
android:gravity="left"
android:hint="请输入文件内容"
android:padding="5dp"
android:textSize="20sp" />
</LinearLayout>
4. 内部存储的其他方法
-
- 获取在其中存储内部文件的文件系统目录的绝对路径。
getFilesDir()
-
- 在您的内部存储空间内创建(或打开现有的)目录。
getDir()
-
- 返回您的应用当前保存的一系列文件。
fileList()
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。
既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取
1.支付宝搜索 522398497,或扫码支付宝红包海报。
支付宝扫一扫,每天领取大红包
2.微信红包,微信扫一扫即可领取红包
微信扫一扫,每天领取微信红包
小礼物走一走,来简书关注我