【问题标题】:Creating File & Directories not working properly创建文件和目录无法正常工作
【发布时间】:2014-04-23 17:31:07
【问题描述】:

我目前正在研究一种创建文件和目录的方法。下面是用例和问题的解释。

1) 当用户指定路径时,例如“/parent/sub folder/file.txt”,系统应该能够与file.txt一起创建目录。 (这个有效)

2) 当用户指定路径时,例如“/parent/sub-folder/”或“/parent/sub-folder”,系统应该能够创建所有目录。 (不起作用),它不会创建“/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());
    }

【问题讨论】:

  • 为什么不使用 .mkdr() 作为目录和文件?
  • mkdir() 做同样的事情,仍然会将应该是文件的目录。
  • 如果您将路径指定为/parent/sub-folder,JVM 将如何识别您要创建目录?我会创建并归档,这就是它应该做的。
  • 那为什么我尝试/parent/sub-folder/时没有创建文件夹?
  • @Andre Files.isDirectory 仅检查现有文件夹,而不检查尚未创建的文件夹。如何区分文件路径和目录路径?

标签: java file path


【解决方案1】:

您需要使用 createDirectories(Path) 而不是createDirectory(path)。如tutorial 中所述:

当一个或多个 父目录可能还不存在,您可以使用方便 方法,创建目录(路径,文件属性)。与 createDirectory(Path, FileAttribute) 方法,你可以指定一个 可选的初始文件属性集。以下代码sn -p 使用默认属性:

Files.createDirectories(Paths.get("foo/bar/test"));

目录 根据需要,自上而下创建。在 foo/bar/test 例如,如果 foo 目录不存在,则创建它。接下来, 如果需要,创建 bar 目录,最后创建 test 目录 已创建。

创建一些后此方法可能会失败,但不会 all, 父目录。

【讨论】:

  • 是的,我以前使用过它,但问题是,它会解决我已经拥有的那个相反的问题。例如,不是将“file.txt”创建到文件中,而是将其创建到目录中
【解决方案2】:

不确定您使用的是哪个文件 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());
        }
    }

}

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多