在user.home中的另一个目录中创建目录?

时间:2012-01-04 05:37:28

标签: java directory system-properties

我只是想知道我制作的代码是否可以在彼此之间创建多个目录。我使用this作为参考。

        String username = enterUserTF.getText(); //the username the user enters in a textfield.

        boolean myGamesFolderSuccess = new File(System.getProperty("user.home"), "My Games").mkdir();

        boolean mainFolderSuccess = new File("My Games", "Type King").mkdir();

        boolean userSuccess = new File("TypeKing", username).mkdir(); //creates a folder with the users username.

        if(myGamesFolderSuccess){
            if(mainFolderSuccess){
                if(userSuccess){
                    System.out.println("Directory " + username + " created.");

                        File f = new File(username + "/test.txt");
                        if(!f.exists()){
                            try {
                                f.createNewFile();

                            } catch (IOException e) {
                                e.printStackTrace();
                                System.out.println("Could not create user's file.");
                            }
                        }
                    }   
                }
            }
        }

总而言之,我在user.home创建了第一个目录“我的游戏”,然后在我的目录中放置了我的游戏名称“Type King”,每当用户输入用户名时,我想要创建一个用户名的目录。 File f只检查username目录中的文件。

4 个答案:

答案 0 :(得分:2)

如果您将完整路径传递给File.mkdirs(带有s),它将构成一个任意深度的目录结构。您不必一次构建一个目录的路径。如果目录已经存在,或者存在其中一些目录,它仍将按预期工作。

答案 1 :(得分:2)

建议使用mkdirs类的File方法,而不是在创建嵌套目录时检查多个状态标志。此外,永远不要使用连接来创建File对象/路径。

此外,如果您希望您的游戏可移植,请确保您的目录名称中没有特殊字符,例如空格等。为什么要求用户输入名称而不是从user.name检索它系统属性?这样的事情应该有效:

String username = System.getProperty("user.name");
File myGamesDir = new File(System.getProperty("user.home"), "my-games");
File typeKingDir = new File(myGamesDir, "type-king");
File userDir = new File(typeKingDir, username);
boolean userSuccess = userDir.mkdirs();
if(userSuccess){
    System.out.println("Directory " + username + " created.");
    File f = new File(userDir, "test.txt");
    if(!f.exists()){
        try {
            f.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("Could not create user's file.");
        }
    }

}

答案 2 :(得分:1)

import java.io.File;
import javax.swing.JOptionPane;

class Dirs {

    public static void main(String[] args) throws Exception {
        String subDir = "My Games|Type King";
        String userName = JOptionPane.showInputDialog(
            null,
            "Who are you?");
        subDir += "|" + userName;
        String[] parts = subDir.split("\\|");
        File f = new File(System.getProperty("user.home"));
        for (String part : parts) {
            f = new File(f, part);
        }
        boolean madeDir = f.mkdirs();
        System.out.println("Created new dir: \t" + madeDir  + "  \t" + f);

        f = new File(f, "eg.txt");
        if (!f.exists()) {
            boolean madeFile = f.createNewFile();
            System.out.println(
                "Created new file: \t" + madeFile  + "  \t" + f );
        }
    }
}

输出

Created new dir:        true    C:\Users\Andrew\My Games\Type King\BilboBaggins
Created new file:       true    C:\Users\Andrew\My Games\Type King\BilboBaggins\eg.txt

答案 3 :(得分:0)

我认为最好使用API​​中提供的现有功能。如果您没有任何限制,请考虑切换到最新的JDK。在1.7中,Oracle确实引入了许多增强功能,包括 IO 新IO

要在彼此之间创建多个目录,您可以利用自1.7以来的Files.createDirectories。 “它将通过首先创建所有不存在的父目录来创建目录。