【发布时间】:2021-09-09 10:22:42
【问题描述】:
现在我正在为自己创建一个应用程序,将数据附加到少数文件中。但是当我尝试创建文件时——或者实际上,打开它们——程序会抛出java.io.IOException: Operation not permitted。
如您所见,已授予存储权限。 (这个应用是我自己专用的,所以我不太担心它对其他用户的影响。)
直接通过手机本身或通过我的电脑检查文件系统不会显示这些文件。
注意:即使我事先删除了目录,创建目录(即dir.mkdirs();)不会引发错误。但是,处理文件确实会引发错误。
我正在运行 Android 11,我的 Android Studio 已设置为在 Lollipop 中运行。
MainActivity.java:
public class MainActivity extends AppCompatActivity {
public static File dir = new File(new File(Environment.getExternalStorageDirectory(), "bleh"), "bleh");
@Override protected void onCreate(Bundle savedInstanceState) {
//bleh
dir.mkdirs();
dir.setWritable(true)
addButtons();
}
public void addButtons() throws IOException {
Option.A.init(R.id.A);
Option.B.init(R.id.B);
Option.C.init(R.id.C);
Option.D.init(R.id.D);
Option.E.init(R.id.E);
Option.F.init(R.id.F);
// This is beyond the scope of my
// question, but if you could also
// show me a better way to do this,
// that would be great.
}
}
Option.java:
public enum Option {
A, B, C, D, E, F, ;
public File data;
public PrintWriter printer;
Option() {
data = new File(MainActivity.dir, name().toLowerCase() + ".data");
}
public void init(int buttonid) {
try {
data.createNewFile();
printer = new PrintWriter(data);
// Both of these lines throw this exception.
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
}
}
【问题讨论】:
-
Android studio throwing IOException:ANDthe program throws java.io.IOException:不匹配。 -
data = new File(MainActivity.dir, name().toLowerCase() + ".data");没有人知道你的变量的值。所以没有人知道你使用的路径。请只发布我们可以理解的代码。 -
你是在 Android 10 还是 11 上测试这个?
-
dir.mkdirs(); Check the return value!if (!dir.exists()) if (!dir.mkdirs()) { Toast(...抱歉无法创建目录..);返回;}` -
dir.setWritable(true)这种说法毫无意义。如果不是,则不能使其可写。
标签: java android io filesystems