我正在开发一个应用已经有大约两个月了,但最近在尝试在我的应用特定文件目录下创建、写入和读取文件时遇到了问题。
我按照Android开发者指南中的示例来创建文件并写入内容,链接是这里,但我的应用一直抛出以下异常:
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively0(Native Method)
at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
at java.io.File.createNewFile(File.java:1006)
at com.adoc.apktest.Tools.writeFile(Tools.java:36)
at com.adoc.apktest.GeneralFunctions.testCallLog(GeneralFunctions.java:71)
at com.adoc.apktest.Tests.run(Tests.java:98)
在上述引用的文章中提到:
你的应用不需要任何系统权限来读写这些目录下的文件。
所以我无法理解为什么每次尝试创建或写入文件时都会抛出这个异常。
以下是与这个问题相关的代码片段:
在MainActivity.java
中,我初始化一些对象并开始测试:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
String testID = getIntent().getStringExtra("testID");
Tools tools = new Tools(this);
Tests tests = new Tests(testID, this, tools);
tests.start();
}
在Tests.java
中,我根据不同的testID
执行不同的测试:
public Tests(String testID, Context context, Tools tools) {
this.testID = testID;
this.context = context;
this.tools = tools;
}
@Override
public void run() {
super.run();
try {
switch (testID) {
...
case "generalFunctions": {
GeneralFunctions.testCallLog(context, tools, "016");
...
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
在GeneralFunctions.java
中,我尝试读写文件以进行某些逻辑处理:
public static void testCallLog(Context context, Tools tools, String number) {
try {
tools.deleteFile("pcStatus.txt");
while (!tools.readFile("pcStatus.txt").equals("id=" + number)) {
Log.w("General Functions", "pcStatus.txt not found");
Thread.sleep(1000);
}
tools.deleteFile("status.txt");
// 进行电话拨打操作
...
tools.writeFile("status.txt", "endCall", false);
...
} catch (Exception e) {
e.printStackTrace();
}
}
在Tools.java
中定义了文件读写的方法:
public void writeFile(String fileName, String content, boolean append) {
File file = new File(context.getFilesDir(), fileName);
try {
if (!file.exists()) {
file.createNewFile(); // 这里抛出了异常
}
FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
fos.write(content.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("Write File", "File: " + file.getAbsoluteFile() + "\nwritten successfully with data: " + content);
}