我是Android的新手,我试图在Android设备的内部存储中写入文本文件。但是我得到这个例外。
java.io.FileNotFoundException:/data/Afile.txt(权限被拒绝)
我尝试缩小问题范围,发现是权限问题,因此我在清单文件中使用了这些权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
但是问题没有解决,然后我发现从高于API级别23的版本中,我们必须在运行时请求权限,因此我在运行时使用此功能来请求将文件写入内部存储的权限。
private void checkDiskPermission ()
{
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "No Permissions" , Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 0);
}
else
{
Toast.makeText(this, "Has Permissions" , Toast.LENGTH_LONG).show();
}
}
在写入文件之前,我在按钮单击事件中调用了此函数。并在
onCreate
方法分开。
但是我仍然收到“访问被拒绝”错误。
请帮助我,我应该怎么做以及如何解决这个问题。
这是用于在内部存储器中写入文件的代码。
我想将其保存在更明显的文件夹中,例如“ Downloads或DCIM”,以便轻松访问它,但找不到任何方法,因此我将此文件写入“ data”文件夹中。
try {
checkDiskPermission();
File path = Environment.getDataDirectory();
if(!path.exists())
{
path.mkdirs();
}
File myfile = new File(path, "Afile.txt");
FileWriter writer = new FileWriter(myfile);
writer.append("Hello This is sample test!");
writer.flush();
writer.close();
toast = Toast.makeText(getApplicationContext(), "Successful", Toast.LENGTH_SHORT);
query.setText(path.toString());
} catch (Exception ex) {
toast = Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_SHORT);
query.setText("Catch " + ex.toString());
}
我在按钮的onClick方法中使用此代码。
在几乎所有的操作系统中,每个文件/文件夹都具有所有权/权限,并且根据试图访问该文件/文件夹的用户,它完全允许或拒绝该用户(显示为Permission Denied
)。该文件夹/data/
是Android系统本身拥有的私有文件夹。即使已授予存储权限,任何尝试访问它的应用程序都将被拒绝。该应用允许某些位置读取和写入。使用Environment.getExternalStoragePublicDirectory(DIRECTORY_DOWNLOADS)
代替Environment.getDataDirectory()
。有关以下操作,请查看以下链接中的内部和外部文件存储部分:数据和文件存储概述
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句