android创建外部存储文件

优先外部存贮
public static String getFilePath(Context context, String dir) {
    String directoryPath="";
    if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ) {//判断外部存储是否可用
        directoryPath =context.getExternalFilesDir(dir).getAbsolutePath();
    }else{//没外部存储就使用内部存储
        directoryPath=context.getFilesDir()+ File.separator+dir;
    }
    File file = new File(directoryPath);
    if(!file.exists()){//判断文件目录是否存在
        file.mkdirs();
    }
    return directoryPath;
}

(1)内部存储 

内部存储一般用Context来获取和操作。 

访问内部存储的API方法: 

1、Environment.getDataDirectory() 
2、getFilesDir().getAbsolutePath() 
3、getCacheDir().getAbsolutePath() 

4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() 

 

(2)外部存储 

/storage/emulated/0/Android/data/packname/files/mounted 
/storage/B3E4-1711/Android/data/packname/files/mounted 
其中/storage/emulated/0目录就是机身存储的外部存储路径 
而/storage/B3E4-1711/就是SD卡的路径 
他们统称为外部存储 
访问外部存储的API方法:
1、Environment.getExternalStorageDirectory().getAbsolutePath() 
2、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() 
3、getExternalFilesDir(“”).getAbsolutePath() 
4、getExternalCacheDir().getAbsolutePath() 

 

 

二、getDataDirectory,getFilesDir,getCacheDir,getDir,getExternalStorageDirectory,getExternalStoragePublicDirectory,getExternalFilesDir,getExternalCacheDir,getExternalCacheDir,getRootDirectory的区别和联系

1、Environment.getDataDirectory() = /data 
这个方法是获取内部存储的根路径 
2、getFilesDir().getAbsolutePath() = /data/user/0/packname/files 
这个方法是获取某个应用在内部存储中的files路径 
3、getCacheDir().getAbsolutePath() = /data/user/0/packname/cache 
这个方法是获取某个应用在内部存储中的cache路径 
4、getDir(“myFile”, MODE_PRIVATE).getAbsolutePath() = /data/user/0/packname/app_myFile 
这个方法是获取某个应用在内部存储中的自定义路径 
方法2,3,4的路径中都带有包名,说明他们是属于某个应用 
………………………………………………………………………………………… 
5、Environment.getExternalStorageDirectory().getAbsolutePath() = /storage/emulated/0 
这个方法是获取外部存储的根路径 
6、Environment.getExternalStoragePublicDirectory(“”).getAbsolutePath() = /storage/emulated/0 
这个方法是获取外部存储的根路径 
7、getExternalFilesDir(“”).getAbsolutePath() = /storage/emulated/0/Android/data/packname/files 
这个方法是获取某个应用在外部存储中的files路径 
8、getExternalCacheDir().getAbsolutePath() = /storage/emulated/0/Android/data/packname/cache 
这个方法是获取某个应用在外部存储中的cache路径 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值