界面:
Layout:
<?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"> <EditText android:id="@+id/et_output" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请写入数据到文件" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示读取处理到信息:" /> <TextView android:id="@+id/tv_input" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:textColor="@android:color/black" android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp"> <Button android:id="@+id/bt_output" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="写入" /> <Button android:id="@+id/bt_input" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读取" android:layout_alignParentRight="true" /> </RelativeLayout> </LinearLayout>
MainActivity读写相关代码:
package liudeli.datastorage; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class MainActivity3 extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); initViewListener(); } private EditText etOutpu; private TextView tvInput; public Button btOutput, btInput; private void initViewListener() { etOutpu = findViewById(R.id.et_output); tvInput = findViewById(R.id.tv_input); btOutput = findViewById(R.id.bt_output); btInput = findViewById(R.id.bt_input); btOutput.setOnClickListener(this); btInput.setOnClickListener(this); // 让TextView获得焦点,TextView就可以滚动了 tvInput.setSelected(true); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_input: { // Java传统方式 注意:访问自身APP到目录是不需要权限 Linux目录是以/为开头 File file = new File("/data/data/" + getPackageName() + "/my_file.txt"); if (!file.exists()) { Toast.makeText(MainActivity3.this, "文件不存在", Toast.LENGTH_LONG).show(); return; } try { // 使用字符读取流 FileReader fileReader = new FileReader(file); // 为什么要用BufferedReader,因为BufferedReader有readLine()的方法 BufferedReader br = new BufferedReader(fileReader); String result = br.readLine(); tvInput.setText(result + ""); fileReader.close(); br.close(); } catch (Exception e) { e.printStackTrace(); } break; } case R.id.bt_output: { String outputStr = etOutpu.getText().toString(); if (TextUtils.isEmpty(outputStr)) { Toast.makeText(MainActivity3.this, "请输入内容!", Toast.LENGTH_SHORT).show(); return; } // Java传统方式 注意:访问自身APP到目录是不需要权限 Linux目录是以/为开头 File file = new File("/data/data/" + getPackageName() + "/my_file.txt"); try { // 字符写入流 FileWriter fileWriter = new FileWriter(file); fileWriter.write(outputStr); fileWriter.close(); } catch (IOException e) { e.printStackTrace(); } break; } default: break; } } }
存储的目录: