【问题标题】:Java - mkdir() creates read-only directory [duplicate]Java - mkdir() 创建只读目录
【发布时间】:2017-06-27 14:34:15
【问题描述】:

我正在使用以下代码创建一个目录(“FileAdmin”):

public class FileAdmin {

    private File dir;

    public FileAdmin() throws IOException{
        this.dir = new File("FileAdmin");
        if(!dir.exists() & !dir.mkdir()) throw new IOException();
}

Main 执行以下操作:

public static void main(String[] args) {
    try{
        FileAdmin fa = new FileAdmin();
    } catch (Exception e){
        e.printStackTrace();
    }
}

这不是问题;当我在目录中创建一个文件(成功)并尝试删除它时,我不能。问题是 mkdir() 会创建一个只读目录,无论我做什么:

Solo lectura -> 只读

我已经尝试过dir.setWritable(true);,但它总是返回false。这是为什么呢?

编辑1:如果我创建目录,取消选中文件夹属性中的read-only 选项,一旦我运行代码文件就会被删除

编辑 2:我使用的是 Windows 10

【问题讨论】:

  • 你为什么使用按位或这里!dir.exists() & !dir.mkdir()?这将始终尝试创建目录,即使它已经存在。使用逻辑或&&,如果前半部分已经为真,这将缩短表达式的后半部分并且不计算表达式的后半部分。
  • 旁白:不要在构造函数中做那样的工作。构造函数应该只初始化对象;添加一个单独的方法来创建目录。
  • 在同一位置手动创建文件夹,并检查其属性。我想它会是一样的。
  • @AndyTurner 我这样做是因为该对象是一个目录,适用于特定项目。它的目的是关于我没有展示的方法,因为它们与问题无关
  • 顺便说一句,只读中的黑色方块并不意味着它是只读的,它处于未知状态。您可以单击该框并将其更改为勾选或未勾选状态。

标签: java mkdir


【解决方案1】:

我不知道我是否正确理解了您的问题,但是 我尝试了以下代码,其中创建了一个文件夹 FileAdmin 并在该文件夹内创建了一个名为 WritableFile.txt 的文件,最后该文件已被删除。

public class Main {
    public static void main(String[] args) throws Exception {
        File directory = new File("FileAdmin");
        directory.mkdir();
        File file = new File("FileAdmin/WritableFile.txt");
        file.createNewFile();

        file.delete();
    }
}

如果我对您的问题的理解不同,请纠正我。我在 Windows 10 上。如果您对 file.delete() 进行注释,那么您将在文件夹中看到该文件。

【讨论】:

  • 在 Linux 上尝试了我的代码,它可以工作。我相信这与权限有关,感谢您的帮助
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多