Java 无法访问创建的内部目录
当我尝试在storage/emulator/0/目录中创建一个目录时,它将不可见且不可访问。我使用Java 无法访问创建的内部目录,java,android,Java,Android,当我尝试在storage/emulator/0/目录中创建一个目录时,它将不可见且不可访问。我使用mkdir()创建,当我检查它的存在时,dir.exists()返回true,即使我无法访问它 我的设备在API 23中运行,因此我在运行时获得权限,如下所示: boolean hasPermission = (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
mkdir()
创建,当我检查它的存在时,dir.exists()
返回true,即使我无法访问它
我的设备在API 23中运行,因此我在运行时获得权限,如下所示:
boolean hasPermission = (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_READ_STORAGE);
}
我还创建了onRequestPermissionsResult
函数:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_READ_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(this, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}
在这个函数中,我尝试访问我的目录
public void makeOutSide(String song, InputStream ins){
// Create the directory
File dir = new File(Environment.getExternalStorageDirectory(),"appMemes");
// If it does not exists, make it.
if (!dir.exists()) {
dir.mkdirs(); // Generating the directory
}
try {
// Open the resource
byte[] buffer = new byte[ins.available()];
ins.read(buffer);
ins.close();
// Burn
String filename = Environment.getExternalStorageDirectory()
+ "/appMemes/"+song+".mp3";
FileOutputStream fos = new FileOutputStream(filename);
fos.write(buffer);
fos.close();
} catch (Exception e) {
System.out.println(e);
}
}
MyAndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.renan.appmemes">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
...
</application>
首先将EnableRuntimePermission函数放入Oncreate中
private void EnableRuntimePermission() {
if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale
(MainActivity.this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(MainActivity.this, "Allow permissions", Toast.LENGTH_LONG).show();
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(
new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestPermissionCode);
}
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case RequestPermissionCode:
if (grantResults.length > 0) {
boolean writeExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED;
if (writeExternalFile) {
} else {
Toast.makeText(MainActivity.this, "Allow permissions to Edit the Image", Toast.LENGTH_LONG).show();
}
}
break;
}
}
然后使用这一行创建direcory
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/DSLR CAMERASagar/");
dir.mkdirs();
您是如何尝试访问它的?我更新了我的问题,mandir.mkdirs()代码>。它可能会失败。确实如此,不是吗!?它应该是:if(!dir.mkdirs()){Toast(…);return;}
String filename=Environment.getExternalStorageDirectory()+“/appMemes/”+song+“.mp3”;FileOutputStream fos=新的FileOutputStream(文件名)代码>。再次构造该路径的编码非常糟糕。现在代码中有两个“/appMemes”。无益。替换为File File=new文件(dir,song+“.mp3”);FileOutputStream fos=新的FileOutputStream(文件)代码>存储/emulator/0/目录中的目录,它将不可见且不可访问代码>。你是说/storage/emulator/0/
!?你说隐形是什么意思?为谁?哪里你说的不可接近是什么意思?是谁干的?哪里怎么了?你好!我完全按照你说的去做,但同样的错误依然存在。这里我粘贴了我的函数onCreate()和我尝试创建并访问目录的函数:没有出现错误消息,但是当我尝试访问保存在我创建的目录文件夹中的文件时,它不在那里。我也看不到我创建的目录,即使验证表明它是…我认为您需要WRITE_EXTERNAL_STORAGE permission将我的EnableRuntimePermission函数放在Oncreate方法中