Создание файлов и каталогов не работает должным образом


В настоящее время я работаю над методом, который будет создавать файлы и каталоги. Ниже приведен пример использования и объяснена проблема.

1) Когда пользователь указывает путь, например " / parent / sub folder / file.txt", система должна иметь возможность создавать каталог вместе с файлом.формат txt. (Этот работает)

2) Когда пользователь указывает путь к электронной.г "/родителей/подпапка/" или "/родителей/подпапке", система должна быть в состоянии создать все каталоги. (Не работает), вместо того чтобы его создавать "/sub-folder/ "или /sub-folder" в качестве папки он создаст файл с именем "sub-folder".

Вот код, который у меня есть

Path path = Paths.get(rootDir+"test/hello/");
    try {
        Files.createDirectories(path.getParent());
        if (!Files.isDirectory(path)) {
            Files.createFile(path);
        } else {
            Files.createDirectory(path);
        }
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
2 3

2 ответа:

Вам нужно использовать createDirectories(Path) вместо createDirectory(path). Как описано в учебнике :

Для создания каталога глубиной в несколько уровней, когда один или несколько из родительские каталоги могут еще не существовать, вы можете использовать удобство метод, createDirectories (Path, FileAttribute). Как и в случае с createDirectory (Path, FileAttribute) метод, вы можете указать необязательный набор исходных атрибутов файла. Следующий фрагмент кода использует атрибуты по умолчанию:

Файлы.createDirectories (пути.get("foo/bar/test"));

Каталоги создаются, по мере необходимости, сверху вниз. В foo / баре / тесте например, если каталог foo не существует, он создается. Далее: при необходимости создается каталог bar и, наконец, тестовый каталог создаваемый.

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

Не уверен, какой файловый API вы используете. Но найдите ниже самый простой код для создания файла вместе с папками с помощью java.io пакет.

import java.io.File;
import java.io.IOException;


public class FileTest {

    public static void main(String[] args) {
        FileTest fileTest = new FileTest();
        fileTest.createFile("C:"+File.separator+"folder"+File.separator+"file.txt");
    }

    public void createFile(String rootDir) {
        String filePath = rootDir;
        try {
            if(rootDir.contains(File.separator)){
                filePath = rootDir.substring(0, rootDir.lastIndexOf(File.separator));
            }
            File file = new File(filePath);
            if(!file.exists()) {
                System.out.println(file.mkdirs());
                file = new File(rootDir);
                System.out.println(file.createNewFile());
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

}