文件转到文件夹

时间:2014-03-07 23:10:01

标签: java file directory

所以,我在文件上遇到了困难。我以前用过文件,但这次他们很痛苦。

public SaveFile(File newFile)
{
    this.file = newFile;

    boolean first = false;
    if(!file.exists()){
        file.mkdir();
        first = true;
    }

    if(file.isDirectory()){
        throw new IllegalStateException("Save file can not be a folder");
    }

    if(file.getName().equalsIgnoreCase("current")){
        first = false;
    }

    this.config = YamlConfiguration.loadConfiguration(this.file);

    String name = file.getName();

    name =  name.substring(0, name.lastIndexOf("."));

    if(first){
        config.set("name", name);
        config.set("health", 20.0F);
        config.set("level", 0);
    }

    try {
        config.save(file);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

当我创建一个保存文件时,它没有问题。我可以查看和编辑文件,这很棒。但是,如果我尝试创建第二个SaveFile,它会将NEW文件转换为文件夹并抛出IllegalStateException

它的外观如下:

public static void main(String[] args){
    SaveFile robert = new SaveFile(new File(SaveFile.getSaveFolder(), "Robert.save"));
    SaveFile james = new SaveFile(new File(SaveFile.getSaveFolder(), "James.save");
}

SaveFile robert 已创建,看起来应该如此。 SaveFile james 创建为文件夹,并抛出IllegalStateException

3 个答案:

答案 0 :(得分:2)

显然,您正在尝试在父目录中创建文件,并且要检查父目录是否存在,并在需要时首先创建它。

您需要获取您传递的文件的父级,这是您可能想要使用File#getParentFile()创建的目录。此方法返回一个巫婆的File对象,您必须调用File#mkdirs()

你可以像这样继续下去:

public void saveFile(File newFile)
{
    File file = newFile;

    if(! file.exists()){
        File dir = file.getParentFile();
        if(! dir.exists()) {
            if(dir.mkdirs()) {
                System.out.println("parent directory " 
                    + dir.getPath() + " created");
            }
            if(! dir.isDirectory()){
                throw new IllegalStateException("Unable to create directory "
                 + dir.getPath());
            }
        }
    } else {
        if(file.isDirectory()){
            throw new IllegalStateException("Save file can not be a folder");
        }
    }

    // ...

    System.out.println("Save file " + file.getPath() + " created");
}

答案 1 :(得分:0)

我认为您的问题就在这里,正如我的代码评论所述:

boolean first = false;
if(!file.exists()){
    // the following line is turning the file into a directory if the file
    // doesn't already exist
    file.mkdir();
    first = true;
}

// now you are checking if the directory you just created is a directory
// (this will, of course, be true) and thus throw the exception
if(file.isDirectory()){
    throw new IllegalStateException("Save file can not be a folder");
}

所以看起来像#34; Robert.save"存在,因而有效,但是" James.save"并不是因为它被创建为目录。

答案 2 :(得分:0)

这与这行代码有关:

file.mkdir();

,它使您作为参数传递的File对象的路径之外的目录。因此,如果在执行之前不存在任何文件(Robert.saveJames.save),它将创建两个名为/your/path/Robert.save/your/path/James.save目录

它只创建一个目录的事实可能只是由于在执行代码之前Robert.save可能已经存在的事实。因此,不会调用mkDir方法,因为未验证以下条件:

if(!file.exists())