【发布时间】:2023-03-21 18:03:01
【问题描述】:
我是 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
单独的方法。
但我仍然收到“拒绝访问”错误。
请帮助我该怎么做以及如何解决这个问题。
这是在内部存储中写入文件的代码。
我想将它保存在任何更明显的文件夹中,例如“下载或 DCIM”以轻松访问它,但找不到任何方法,因此我将此文件写入“数据”文件夹。
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 方法中使用此代码。
【问题讨论】:
标签: java android text-files filewriter access-denied