您的位置:首页 > 编程语言

第一行代码 第六章 数据储存方案 - 文件存储

2017-08-12 22:52 375 查看
Android主要提供了3个方法实现数据的持久化功能

1、SharedPreference存储;2、文件存储;3、数据库存储

1、文件存储

它是android中最基本的一种数据存储方式。它不对存储的内容做任何的格式化处理,将数据原封不动地保存到文件中。

Context类中提供了openFileOutput()方法,用于将数据存储到指定的文件中。

该方法提供两个接收参数

第一个参数是文件名。这里指定的文件名不可以包含路径,因为所有的文件都默认存储到/data/data//file目录下。

第二个参数是文件的操作模式。提供两种模式:

1.MODE_PRIVATE:当指定同样文件名时,所写入的内容将会覆盖原文件的内容

2.MODE_APPEND:如果该文件已经存在,则在文件的末尾追加内容。

该方法返回一个FileOutputStream对象,得到这个对象之后,就可以使用Java流的方式将数据写入到文件中。

Java流方式:写入数据

1.通过openFileOutput()方法得到FileOutputStream对象;

2.借助FileOutputStream对象,构建一个OutputStreamWriter对象;

3.借助OutputStreamWriter对象,构建一个BufferedWriter对象

4.通过BufferedWriter对象提供的write()方法,就可以将文本内容写入到文件中。

实例:如何将一段文本内容保存到文件中

public void saveFile(){
String data = "Hello World!";
FileOutputStream mFileOutputStream = null;
OutputStreamWriter mOutputStreamWriter = null;
BufferedWriter writer = null;
try{
mFileOutputStream = openFileOutput("data.txt", MODE_APPEND);
mOutputStreamWriter = new OutputStreamWriter(mFileOutputStream)
writer = new BufferedWrite(mOutputStreamWriter);
writer.write(data);
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(writer != null){
writer.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}


Context类还提供了一个openFileInput()方法,用于从文件中读取数据。

它只接收一个参数,即文件名

它返回一个FileInputStream对象,得到这个对象后就可以通过Java流的方式将数据读出来

Java流的方式:读取数据

1.通过openFileInput方法得到一个FileInputStream对象;

2.借助FileInputStream对象,构建InputStreamReader对象;

3.借助InputStreamReader对象,构建BufferedReader对象

4.通过BufferedReader进行一行一行地读取,并存放到StringBuilder对象中。

实例:如何从文件中读取文本数据

public String load(){
FileInputStream fileInputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuilder builder = new StringBuidler();
try{
fileInputStream = openFileInput("data.txt");
inputStreamReader = new InputStreamReader(fileInputStream);
reader = new BufferedReader(inputStreamReader);
String line = "";
while((line=reader.readLine()) != null){
builder.append(line);
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try{
reader.close();
}catch(IOException e){
e.printStackTrace();
}

}
}

return builder.toString();
}


实例:读写文件

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button btnWriteToFile;
private Button btnReadFromFile;
private EditText etIput;
private TextView tvShowContent;

private final  static String FILE_NAME = "data.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btnWriteToFile = (Button)findViewById(R.id.btnWriteToFile);
btnReadFromFile = (Button)findViewById(R.id.btnReadFromFile);
etIput = (EditText)findViewById(R.id.etIput);
tvShowContent = (TextView)findViewById(R.id.tvShowContent);

btnWriteToFile.setOnClickListener(this);
btnReadFromFile.setOnClickListener(this);

String data = readFromFile(FILE_NAME);
if(!TextUtils.isEmpty(data)){
etIput.setText(data);
etIput.setSelection(data.length());
tvShowContent.setText(data);
}
}

@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btnWriteToFile:
String content = etIput.getText().toString();
writeToFile(FILE_NAME, content);
break;
case R.id.btnReadFromFile:
String ret = readFromFile(FILE_NAME);
tvShowContent.setText(ret);
break;
default:break;
}
}

private void writeToFile(String filename, String content) {
FileOutputStream fileOutputStream = null;
OutputStreamWriter outputStreamWriter = null;
BufferedWriter writer = null;
try {
fileOutputStream = openFileOutput("data.txt", MODE_APPEND);
outputStreamWriter = new OutputStreamWriter(fileOutputStream);
writer = new BufferedWriter(outputStreamWriter);
writer.write(content);
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(writer != null){
writer.close();
}
}catch (IOException e){
e.printStackTrace();
}
}
}

private String readFromFile(String filename){
FileInputStream fileInputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuilder builder = new StringBuilder();
try{
fileInputStream = openFileInput(filename);
inputStreamReader = new InputStreamReader(fileInputStream);
reader = new BufferedReader(inputS
a957
treamReader);
String line = "";
while ((line = reader.readLine()) != null){
builder.append(line);
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

return builder.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: