File 存储
在上一篇的博文中说到了SharedPreferences中提到了SharedPreferences局限性很大,只能存储Java基础数据,所以在某些时候它并不能满足我们的需求,有时候就需要用File存储了。
FileInputStream openFileInput(String name) 对应的是文件输入流
FileOutputStream openFileOutput(String name, int mode) 对应的是输出流
在输出流中的mode模式是说指定打开文件的模式,可以理解为你的数据权限,有以下几种:
MODE_PRIVATE :数据只能被本程序读和写
MODE_WORLD_READABLE :数据可以被其他程序读取,但是不能被写入
MODE_WORLD_WRITABLE :数据可以被其他程序读、写
MODE_APPEND :以追加的方式打开文件,可以向里面追加内容
ok,用一个小例子来说明一下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;
public class MainActivity extends AppCompatActivity {
// write
private Button bt1;
// read
private Button bt2;
private EditText text;
private TextView view;
final String FILE_NAME = "fileSave";
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1 = (Button) findViewById(R.id.button);
bt2 = (Button) findViewById(R.id.button2);
text = (EditText) findViewById(R.id.editText);
view = (TextView) findViewById(R.id.textView);
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
write(text.getText().toString());
text.setText("");
}
});
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
view.setText(read());
}
});
}
public String read() {
try {
// 打开文件输入流,对应的文件名要绑定
FileInputStream inputStream = openFileInput(FILE_NAME);
byte[] buff = new byte[1024];
int hasread = 0;
StringBuilder stringBuilder = new StringBuilder("");
// 读取文件的内容
while ((hasread = inputStream.read(buff)) > 0)
stringBuilder.append(new String(buff, 0, hasread));
// 关闭流并且返回数据
inputStream.close();
return stringBuilder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void write(final String content) {
try {
// 打开文件的输出流,方式我们定义为追加
FileOutputStream outputStream = openFileOutput(FILE_NAME, MODE_APPEND);
PrintStream printStream = new PrintStream(outputStream);
// content就是我们要追加的内容,输入之后要关闭流
printStream.print(content);
printStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
在我们的布局文件中就是简单的设置了两个 按钮,一个输入框,一个文本框,来看下成果
点击了读写按钮之后的结果: