您的位置:首页 > 移动开发 > Android开发

Android中 File存储

2016-06-27 08:29 363 查看
Context 提供了两个方法来打开本地应用程序的数据文件夹里的文件I/O流.

FileInputStream openFileInput (String name): 打开应用程序中的数据文件夹下的name文件对应的输入流.

FileOutputStream openFileOutput (String name, int mode) : 打开应用程序中的数据文件夹下的name文件对应的输出流.

上面两个方法分别用于打开文件的输入流和输出流, 其中第二个方法的第二个参数指定打开文件的模式,该模式支持如下几种方式.:

MODE_APPEND:如果文件已经存在,那么将数据写入到现有文件的末尾,而不是覆盖它.

MODE_PRIVATE :该文件只能被当前程序读写.

MODE_WORLD_READABLE: 该文件的内容可以被其他程序读取.

MODE_WORLD_WRITEABLE: 该文件的内容可以被其他程序读, 写.

另外 ,Context还提供了如下几个方法来访问应用程序的数据文件夹:

getDir(String name, int mode) : 在应用程序的数据文件夹下,获取或创建name对应的子目录.

File getFilesDir(): 获取该应用程序的数据文件夹的绝对路径.

String[] fileList() :返回该应用程序的数据文件夹下的全部文件.

deleteFile(String name) :删除该应用程序的数据文件夹下的指定的文件.

package com.test.filetest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;

/**
* 示范如何读写应用程序数据文件夹内的文件
*/
public class MainActivity extends AppCompatActivity {

Button btnWrite, btnRead;
EditText etWrite;
TextView etRead;

public static final String FILE_NAME = "a.txt";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnWrite = (Button) findViewById(R.id.btn_write);
btnRead = (Button) findViewById(R.id.btn_read);

etRead = (TextView) findViewById(R.id.et_read);
etWrite = (EditText) findViewById(R.id.et_write);

btnWrite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//将edit1中的内容写入文件中
write(etWrite.getText().toString());
etWrite.setText(""); //将第一个输入框设置为空
}
});

btnRead.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
etRead.setText(read2());
}
});
}

private String read2() {

//打开文件输入流
try {
FileInputStream fis = openFileInput(FILE_NAME);

byte[] bytes = new byte[1024];
int hasRead = 0;

StringBuilder sb = new StringBuilder("");

//读取文件内容
while ((hasRead = fis.read(bytes)) > 0) {
sb.append(new String(bytes,0,hasRead));
}

fis.close();

return sb.toString();

} catch (Exception e) {
e.printStackTrace();
}

return null;
}

//写入内容的方法
private void write(String input) {
//以追加的模式打开文件输出流
try {
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND);
//将文件FileOutputStream包装成 PrintStream
PrintStream ps = new PrintStream(fos);

//输出文件内容
ps.println(input);

ps.close(); //关闭文件输出流

} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}


布局界面

<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context="com.test.filetest.MainActivity">

<Button
android:id="@+id/btn_write"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="写入内容"/>

<EditText
android:id="@+id/et_write"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/btn_write"
android:hint="请输入内容"/>

<Button
android:id="@+id/btn_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn_write"
android:text="读取内容"/>

<TextView
android:id="@+id/et_read"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff9"
android:layout_below="@id/et_write"
android:layout_toEndOf="@id/btn_read"
android:layout_toRightOf="@id/btn_write"
android:hint="显示输入内容"/>
</RelativeLayout>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  file数据存储