openFileInput——从文件中读取数据

来源:互联网 发布:js点击函数 编辑:程序博客网 时间:2024/05/24 00:13

类似于将数据存放到文件之中,Context类还有一个openFileInput方法,用于从文件中读取数据,他只接收一个参数,就是文件名,系统会自动到data/data//files目录下加载这个文件,并返回一个FileInputStream对象。拥有了这个对象之后就可以通过java流的方式读取数据了,修改MainActivity代码:

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        edit = (EditText) findViewById(R.id.edit);        String inputText = load();        if (!TextUtils.isEmpty(inputText)) {            edit.setText(inputText);            edit.setSelection(inputText.length());            Toast.makeText(this, "Restoring succeeded",                    Toast.LENGTH_LONG).show();        }    }

首先我们定义了字符串引并指向load方法的返回值,之后判断文件是否为空使用了TextUtils类,详细用法,他专门用来对字符串进行操作,这里判断是否为空。如果不为空,那么就向edit这个控件中输入值inputText,然后调用setSelection方法对光标进行控制,我们想让光标放在字符串的最后以方便用户输入,所以参数是inputText.length()。最后发送一条Toast表示操作成功。
然后编写load方法使它能够返回文件的数据:

    public String load() {        FileInputStream in = null;        BufferedReader reader = null;        StringBuilder content = new StringBuilder();        try {            in = openFileInput("data");            reader = new BufferedReader(new InputStreamReader(in));            String line = "";            while ((line = reader.readLine()) != null) {                content.append(line);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (reader != null) {                try {                    reader.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return content.toString();    }

首先指定了FileInputStream类、StringBuilder类与BufferedReader类的引用,用文件名data作为参数传入openFileInput得到FileInputStream的引用in,然后把BufferedReader的引用reader指向创建的BufferedReader实例,他的构造函数传入参数是新创建的InputStreamReader实例,而InputStreamReader构造函数的参数又是给那才得到的引用in。
现在开始向edit中传递数据,我们一行一行的进行传输,首先初始化一行的数据为空,接着利用readLine方法读取换行符之前的数据,之后用append方法将line中的内容进行拼接加入到content中,一行一行的拼接直到读完整个文件,最后返回content.toString(),就可以把文件中的数据返回给load方法调用者,最终放到EditText里。

0 1