我正在尝试在设备上创建一个文件夹,结果与预期不符。
我在<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
中确实有AndroidManifest.xml
。
我的代码:
public void saveOnDevice(){
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/hello");
boolean x = true;
if (!myDir.exists()) {
x = myDir.mkdirs();
}
if(x) {
System.out.println("Folder created " + root);
}
else{
System.out.println("Folder not created" + root);
}
}
结果:
Folder not created /storage/emulated/0
预期:
Folder created /storage/emulated/0
我在我的三星Galaxy S8上尝试了此操作。我没有插入SD卡。我的设备上没有路径/storage/emulated/0
。为什么它不起作用?如何解决此问题?
答案 0 :(得分:0)
您的设备上确实有该文件夹/ storage / emulated / 0。使用三星的文件浏览器时,由于抽象层的原因,您可能看不到它。
您可以使用更高级的文件浏览器(例如FX File Explorer(https://play.google.com/store/apps/details?id=nextapp.fx)进行验证,然后从“系统/”开始查找该路径。
该root
字符串对您没有帮助。
相反,您想要执行以下操作:
// create folder "myDir" in internal storage as sub directory of /storage/emulated/0
File myDir = new File(Environment.getExternalStorageDirectory(), "myDir");
// create file
File myFile = new File(myDir, "song.mp3");
// get file stream
FileOutputStream fileStream = new FileOutputStream(myFile);
然后,您只需将歌曲内容写入fileStream
。
Environment.getExternalStorageDirectory()
实际上为您提供了内部存储位置,但在应用目录的外部(例如Android/your.apps.packagename/
),这有点令人困惑。