Создание каталога в другом каталоге в user.home? - PullRequest
0 голосов
/ 04 января 2012

Мне было просто интересно, будет ли созданный мной код работать для создания нескольких каталогов друг в друге. Я использовал этот в качестве ссылки.

        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 ]

2 голосов
/ 04 января 2012

Рекомендуется использовать метод 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 голосов
/ 04 января 2012

Если вы передадите полный путь к File.mkdirs (с символами s), это создаст сколь угодно глубокую структуру каталогов.Вам не нужно создавать пути по одному каталогу за раз.Если каталоги уже существуют или некоторые из них существуют, они все равно будут работать так, как вы ожидаете.

1 голос
/ 04 января 2012
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
0 голосов
/ 26 февраля 2016

Я думаю, что лучше использовать существующую функциональность, доступную в API.Если у вас нет никаких ограничений, подумайте о переходе на последнюю версию JDK.В 1.7 Oracle ввел так много улучшений, включая IO и New IO .

Для создания нескольких каталогов внутри друг друга вы можете воспользоваться Files.createDirectories доступно с 1.7." Он создаст каталог, сначала создав все несуществующие родительские каталоги. "

...