setContentView(R.layout.activity_external);
infoEdt = findViewById(R.id.info_edt);
txt = findViewById(R.id.textView);
}
public void operate(View v) {
String path = getExternalFilesDir(null).getAbsolutePath() + "/test.txt";
Log.e("ExternalActivityTag", path);
switch (v.getId()) {
case R.id.save_btn:
File file = getExternalFilesDir(null);
try {
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(path, true);
String str = infoEdt.getText().toString();
fos.write(str.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.read_btn:
try {
FileInputStream fis = new FileInputStream(path);
byte[] b = new byte[1024];
int len = fis.read(b);
String str2 = new String(b, 0, len);
txt.setText(str2);
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
打印出来的具体位置如下所示(结合概述所讲内容可以知道这个目录我们可以在映射目录 sdcard 下面找到):
![](https://img-blog.csdnimg.cn/img_convert/88f8113da13226480ca7fd630920a743.png)
[](
)2.5、注意
--------------------------------------------------------------------
利用 **getExternalFilesDir()** 和 **getExternalCacheDir()** 这两个方法来获取外部存储的私有目录是**不需要任何权限的**,但是如果用 **Environment.getExternalStorageDirectory()** 是需要外部存储的读写权限的,而且在 **Android 6.0** 之后,只在清单文件中声明是不够的,还需要运行时申请,即动态权限。
[](
)三、内部存储
====================================================================
[](
)3.1、概述
--------------------------------------------------------------------
首先,内部存储不是内存。在 **Android studio** 中,内部存储可以通过 **Device File Explorer** 找到,文件夹叫做 **data**,如果你想将文件存储于内部存储中,那么文件默认只能被你的应用访问到,且一个应用所创建的所有文件都在和应用包名相同的目录下。也就是说应用创建于内部存储的文件,与这个应用是关联起来的。当一个应用卸载之后,内部存储中的这些文件也被删除。
[](
)3.2、获取内部存储位置
--------------------------------------------------------------------------
我们可以通过 **getFileDir()** 和 **getCacheDir()** 这两个方法来获取内部存储的目录,它们位于 **data/data/包名/files(cache)** 下面,我们同样用外部存储的实例来演示一下,只是把数据存到内部存储中,因为实例效果是完全一样的,就不演示了,直接看代码(具体代码写法上跟外部存储有点不一样):
public class InternalActivity extends AppCompatActivity {
private EditText edt;
private TextView txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_internal);
edt = findViewById(R.id.editText);
txt = findViewById(R.id.textView);
}
public void operate(View v) {
File file = new File(getFilesDir(), "getFilesDir.txt");
switch (v.getId()) {
case R.id.save_btn:
try {
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
fos.write(edt.getText().toString().getBytes());
fos.close();
} catch (Exception e) {
|