Android是基于java语言的,在java中提供了一套完整的输入输出流操作,与文件相关的有FileInputStream和FileOutputStream等,通过这些类可以方便访问磁盘上的文件内容。通用Android也支持这种方式来访问手机上 的文件。我们直到Android手机中的文件可以存储在内部存储空间和外部SD卡(如果有的话),现在将记录内部存储空间这种情况下的文件存储。
两个方法
Android中文件的读取操作主要是同过Context类来完成的,该类提供了两个方法来打开本应用程序的数据文件夹里的文件IO流。
(1)openFileInput(String name):打开App数据文件夹(data)下name文件对应的输入流。
(2)openFileOutput(String name,int mode):打开应用程序的数据文件夹下的name文件对应输出流。name参数用于指定文件名称,不能包含路径分隔符“\”,如果文件不存在,Android会自动创建,mode参数用于指定操作模式,Context类中定义了四种操作模式常量分别是:
(1)Context.MODE_PRIVATE = 0:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
(2)Context.MODE_APPEND = 32768:模式检查文件是否存在,存在就在文件中追加内容,否则创建新文件再写入内容。
(3)Context.MODE_WORLD_READABLE = 1:表示当前文件可以被其他应用读取。
(4):Context.MODE_WORLD_WRITEABLE = 2:表示当前文件可以被其他应用写入。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<EditText
android:id="@+id/ET_write"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入想存入文件的内容"/>
<Button
android:id="@+id/BT_write"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="写入内容"/>
<!--android:editable="false"将文本框设置为不可编辑状态-->
<EditText
android:id="@+id/ET_read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:editable="false"
android:hint="显示读取的内容"/>
<Button
android:id="@+id/BT_read"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="读取内容"/>
</LinearLayout>
(不同为什么自己截的图会莫名其妙打上水印还有奇怪的qq_31718279是什么东西)
package com.file.file;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
public class MainActivity extends AppCompatActivity {
private Button bt_write,bt_read;
private EditText et_write,et_read;
// 设置保存的文件名称
private String fileName = "content.txt";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_read = (Button)findViewById(R.id.BT_read);
bt_write = (Button)findViewById(R.id.BT_write);
et_read = (EditText)findViewById(R.id.ET_read);
et_write = (EditText)findViewById(R.id.ET_write);
bt_read.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 将读取的内容显示在 EditText 控件上
et_read.setText(read());
}
});
bt_write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 将 EditText 上的内容写入文本
write(et_write.getText().toString());
}
});
}
private void write(String s) {
try{
FileOutputStream fos = openFileOutput(fileName, Context.MODE_APPEND);
PrintStream ps = new PrintStream(fos);
ps.print(s);
ps.close();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String read() {
StringBuilder sbBuilder = new StringBuilder("");
try{
FileInputStream is = openFileInput(fileName);
// 定义缓冲区
byte[] buffer = new byte[64];
// 记录每次读取的字节数
int hasRead;
while ((hasRead = is.read(buffer))!= -1){
sbBuilder.append(new String(buffer,0,hasRead));
}
} catch (Exception e){
e.printStackTrace();
}
return sbBuilder.toString();
}
}