【Android】File存储
Context提供了两个方法openFileOutput和openFileInput。
方法可以打开本应用程序的数据文件夹的文件I/O流。
操作方法
- 01
FileInputStream openFileInput(String name): 打开应用程序的数据文件夹下的name文件对应输入流。 FileOutputStream openFileOutput(String name,int mode): 打开应用程序的数据文件夹下的name文件对应输出流。
openFileOutput(String name,int mode)中mode的几种模式
- 01
MODE_PRIVATE:该文件只能被当前程序读写。 MODE_APPEND:以追加方式打开该文件, 应用程序可以向该文件中追加内容。 MODE_WORLD_READABLE:该文件的内容可以被其他程序读、写。 MODE_WORLD_WRITEABLE:该文件的内容可由其他程序读、写。
- 02
Content上下文提供了几个方法来访问应用程序的数据文件夹。 getDir(String name,int mode):在应用程序的数据文件夹下获取或者创建 name对应的子目录 File getFilesDir():获取该应用程序的数据文件夹的绝对路径。 String[] fileList():返回该应用程序的数据文件夹下的全部文件。 deleteFile(String):删除该应用程序的数据文件夹下的指定文件。
- 03
这里以一个例子来说明 项目结构如下
- 04
布局文件如图 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:id="@+id/edit1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:lines="4"/> <Button android:id="@+id/write" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/write"/> <EditText android:id="@+id/edit2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:editable="false" android:cursorVisible="false" android:lines="4"/> <Button android:id="@+id/read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/read"/> </LinearLayout>
- 05
页面实现代码结构
- 06
页面实现代码onCreate @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); System.out.println(new StringBuilder("a").append("b").append("c") .toString()); // 获取两个按钮 Button read = (Button) findViewById(R.id.read); Button write = (Button) findViewById(R.id.write); // 获取两个文本框 final EditText edit1 = (EditText) findViewById(R.id.edit1); final EditText edit2 = (EditText) findViewById(R.id.edit2); // 为write按钮绑定事件监听器 write.setOnClickListener(new OnClickListener() { @Override public void onClick(View source) { // 将edit1中的内容写入文件中 write(edit1.getText().toString()); edit1.setText(""); } }); read.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 读取指定文件中的内容,并显示出来 edit2.setText(read()); } }); }
- 07
read()读取方法 private String read() { try { // 打开文件输入流 FileInputStream fis = openFileInput(FILE_NAME); byte[] buff = new byte[1024]; int hasRead = 0; StringBuilder sb = new StringBuilder(""); // 读取文件内容 while ((hasRead = fis.read(buff)) > 0) { sb.append(new String(buff, 0, hasRead)); } // 关闭文件输入流 fis.close(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }
- 08
write(String content)写入方法 private void write(String content) { try { // 以追加模式打开文件输出流 FileOutputStream fos = openFileOutput(FILE_NAME, MODE_APPEND); // 将FileOutputStream包装成PrintStream PrintStream ps = new PrintStream(fos); // 输出文件内容 ps.println(content); // 关闭文件输出流 ps.close(); } catch (Exception e) { e.printStackTrace(); } }