我正在尝试将文件写入手机。
我使用Environment.getDataDirectory()
来了解内部存储的路径,并使用Environment.getExternamStorageDirectory()
来了解外部存储的路径。
但是,当我使用Environment.getExternalStorageDirectory()
作为路径时,该文件将在内部存储中创建。当我使用Environment.GetDataStorage()
作为路径时,不会创建该文件。 (我不确定,但至少在探险家应用程序中找不到它。)
我认为我的手机的内部存储被视为外部存储。(在我的情况下,它有32 GB的存储量)
我想知道可移动存储(例如micro SD card
)路径。我该怎么办?
答案 0 :(得分:8)
来自getExternalStorageDirectory()
的官方文档不要在这里混淆“外部”这个词。这个目录 可以更好地被视为媒体/共享存储。它是一个文件系统 可以容纳相对大量的数据,并且可以共享 所有应用程序(不强制执行权限)。传统上这是 SD卡,但它也可以作为内置存储器实现 与受保护的内部存储区别的设备,可以是 作为文件系统安装在计算机上。
因此,它可能与设备中的内置存储不同。
对于您的情况您可以使用getExternalStoragePublicDirectory(java.lang.String)
这是用户通常会放置和管理自己的地方 文件
这里的路径应该是DIRECTORY_MUSIC,DIRECTORY_PODCASTS之一, DIRECTORY_RINGTONES,DIRECTORY_ALARMS,DIRECTORY_NOTIFICATIONS, DIRECTORY_PICTURES,DIRECTORY_MOVIES,DIRECTORY_DOWNLOADS,或 DIRECTORY_DCIM。不能为空。
或者如果您希望在用户卸载应用时删除您的数据,可以使用getExternalFilesDir()
As这些文件是应用程序的内部文件,通常不会被用户视为媒体。
getFilesDir()和getExternalFilesDir()
之间也存在一些差异外部文件并非始终可用:如果用户将外部存储装入计算机或将其删除,它们将消失。有关存储状态的信息,请参阅环境中的API。
这些文件没有强制执行安全措施。例如,任何持有WRITE_EXTERNAL_STORAGE的应用程序都可以写入这些文件。
答案 1 :(得分:0)
您可以尝试使用此代码获取SD卡(外部存储)路径:
String separator = "/";
String sdcardPath = Environment.getExternalStorageDirectory().getPath() + separator;
例如,作为String
的SD卡路径将如下所示:
"mnt/sdcard/"
如果仍然无效,请尝试使用getPath()
更改getAbsolutePath()
。
然后,添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
根据@ ShubhangMalviya的回答,如何获取SD卡目录:
public String getSDCardDirectory(){
String SdcardPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).toString();
String dir = SdcardPath.substring(SdcardPath.lastIndexOf('/') + 1);
System.out.println(dir);
String[] trimmed = SdcardPath.split(dir);
String sdcardPath = trimmed[0];
System.out.println(sdcardPath);
return sdcardPath;
}
我建议你使用Environment.DIRECTORY_DCIM
,因为大多数人从未将他们的DCIM(照片)路径目录从SD卡移动到内部存储。通常,总是在SD卡中。
答案 2 :(得分:-1)
try this....
static String storagestate = Environment.getExternalStorageState();
private static FileOutputStream outStream;
private static File imageFilepath;
public static String saveImage(Bitmap bitmap) {
File folder = null;
//check for SD card
if (storagestate.equals(Environment.MEDIA_MOUNTED)) {
folder = new File(Environment.getExternalStorageDirectory(),
"*YourStorageNameInDevice");
if (!folder.exists()) {
folder.mkdir();
}
outStream = null;
String timestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
.format(new Date());
//getting filepath
imageFilepath = new File(folder.getPath() + File.separator
+ timestamp + ".PNG");
try {
outStream = new FileOutputStream(imageFilepath);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return imageFilepath.getAbsolutePath();
}
}