内部存储 Internal Storage
1, 特点
文件只能被当前应用程序访问, 其他应用程序不能访问
当应用程序卸载后, 程序在内部存储中的文件也会被删除
2, 路径
data/data/应用程序包名/files/***.***
3, 核心代码 FileOutputStream FileInputStream
程序的内部存储, 知道自己的路径在那里, 所以不需要指定
3.1 存入数据
// 1, 打开内部文件存储的输出流
// name 文件名称, mode 文件的操作模式
FileOutputStream fos = openFileOutput(fileName,Context.MODE_PRIVATE);
// 2, 写入数据
fos.write(content.getBytes());
// 3, 关闭流
fos.close();
3.2 读取数据
// 1, 打开内部存储文件的输入流
FileInputStream fis = openFileInput(fileName);
// 2, 读取数据
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 3, 关闭流
fis.close();
4, 内部存储的方法
String[] flieList() 得到内部存储中所有文件的名称
deleteFile(fileName) 删除指定的文件
File getFileDir() 得到应用程序数据文件的绝对路径
1, 特点
文件只能被当前应用程序访问, 其他应用程序不能访问
当应用程序卸载后, 程序在内部存储中的文件也会被删除
2, 路径
data/data/应用程序包名/files/***.***
3, 核心代码 FileOutputStream FileInputStream
程序的内部存储, 知道自己的路径在那里, 所以不需要指定
3.1 存入数据
// 1, 打开内部文件存储的输出流
// name 文件名称, mode 文件的操作模式
FileOutputStream fos = openFileOutput(fileName,Context.MODE_PRIVATE);
// 2, 写入数据
fos.write(content.getBytes());
// 3, 关闭流
fos.close();
3.2 读取数据
// 1, 打开内部存储文件的输入流
FileInputStream fis = openFileInput(fileName);
// 2, 读取数据
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 3, 关闭流
fis.close();
4, 内部存储的方法
String[] flieList() 得到内部存储中所有文件的名称
deleteFile(fileName) 删除指定的文件
File getFileDir() 得到应用程序数据文件的绝对路径
5, 实例一
package com.qf.day12_storage_internal_02;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private EditText nameEdit, contentEdit;
private AlertDialog.Builder builder;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nameEdit = (EditText) findViewById(R.id.file_name);
contentEdit = (EditText) findViewById(R.id.content_id);
initDialog();//每次只初始化一次
}
// 内部存储 : 保存数据
public void saveFile(View v) {
// 得到输入框的内容
String fileName = nameEdit.getText().toString().trim();
String content = contentEdit.getText().toString().trim();
// 将输入的内容保存到文件名为fileName的文件中
try {
// 1, 打开内部文件存储的输出流
// name 文件名称, mode 文件的操作模式
FileOutputStream fos = openFileOutput(fileName,
Context.MODE_PRIVATE);
// 2, 写入数据
fos.write(content.getBytes());
// 3, 关闭流
fos.close();
Toast.makeText(this, "文件存储成功!!!!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
// 内部存储 : 读取数据
public void openFile(View v) {
// 得到用户输入的文件名称
String fileName = nameEdit.getText().toString().trim();
try {
// 1, 打开内部存储文件的输入流
FileInputStream fis = openFileInput(fileName);
// 2, 读取数据
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
// 3, 关闭流
fis.close();
// 将得到的内容设置到contenEdit中
contentEdit.setText(new String(buffer));
} catch (Exception e) {
e.printStackTrace();
}
}
//显示菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//加载菜单页面
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
//实现菜单的点击
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_select:
//清除adapter中的旧数据
adapter.clear();
//获取内部存储中所有的文件名称(数据源)
String[] data = fileList();
//删除某个文件deleteFile(文件名称)
//获取文件的路径getFilesDir()
//将数据源设置到适配器中
adapter.addAll(data);
//显示对话框
builder.show();
break;
}
return super.onOptionsItemSelected(item);
}
//初始化对话框
public void initDialog()
{
builder = new AlertDialog.Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请选择文件名称");
//API 11以上
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
builder.setAdapter(adapter, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//将选中的文件名称 , 设置到文件名的输入框中(nameEdit)
String fileName = adapter.getItem(which);
nameEdit.setText(fileName);
//根据名称, 读取内容,并显示 (打开)
openFile(null);
}
});
}
}
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/layout_id"
>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="输入名称"
android:layout_weight="2"
android:id="@+id/file_name"
android:background="@android:drawable/edit_text"
/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="保存"
android:onClick="saveFile"
/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="打开"
android:onClick="openFile"
/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/layout_id"
android:id="@+id/content_id"
android:hint="请输入内容..."
android:background="@android:drawable/edit_text"
/>
</RelativeLayout>