android 30 如何写入文件到外部存储
时间: 2023-08-20 14:04:02 浏览: 102
android基础
在Android 10及以上版本中,对于非特权应用程序,访问外部存储需要特定的权限和使用新的API。以下是在Android 10及以上版本中将文件写入外部存储的步骤:
1. 在AndroidManifest.xml文件中添加WRITE_EXTERNAL_STORAGE权限,例如:
```xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
```
2. 在应用程序中请求WRITE_EXTERNAL_STORAGE权限。您可以使用以下代码:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
```
3. 获取外部存储的公共目录。您可以使用以下代码获取外部存储的公共目录:
```java
File publicDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS);
```
4. 创建要写入的文件。您可以使用以下代码创建要写入的文件:
```java
File file = new File(publicDir, "example.txt");
```
5. 打开文件输出流并写入文件。您可以使用以下代码打开文件输出流并将字符串写入文件:
```java
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write("Hello, world!".getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
```
6. 在Android 10及以上版本中,您需要使用MediaStore API来让系统知道您已经创建了一个新的文件。您可以使用以下代码:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.DISPLAY_NAME, "example.txt");
values.put(MediaStore.Images.Media.MIME_TYPE, "text/plain");
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS);
ContentResolver resolver = getContentResolver();
Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
}
```
7. 现在,您已经成功地将文件写入外部存储。
请注意,如果您的应用程序具有特权,则可以直接访问外部存储,而无需使用新的API。
阅读全文