Java 确保文件系统中存在特定的目录层次结构(必要时创建)

Java 确保文件系统中存在特定的目录层次结构(必要时创建),java,string,memory,arraylist,Java,String,Memory,Arraylist,问题是:我需要确保文件系统中存在特定的目录层次结构,如果不存在,就创建它 我知道有方法File.mkdirs(),但是该方法的javadocs表明它可能无法创建完成给定路径所需的部分或全部目录 为了解决这个问题,我创建了一个方法,该方法使用一个表示路径的字符串,将其解析为各个部分,并将它们存储到ArrayList中。第二种方法将遍历并构建目录,确保每个目录和子目录都存在 问题是,实际的程序在尝试循环并将字符串分解为各个部分时内存不足。我知道这不是功能;它可以在JUnit测试中独立工作,并且程序本

问题是:我需要确保文件系统中存在特定的目录层次结构,如果不存在,就创建它

我知道有方法
File.mkdirs()
,但是该方法的javadocs表明它可能无法创建完成给定路径所需的部分或全部目录

为了解决这个问题,我创建了一个方法,该方法使用一个表示路径的字符串,将其解析为各个部分,并将它们存储到
ArrayList
中。第二种方法将遍历并构建目录,确保每个目录和子目录都存在

问题是,实际的程序在尝试循环并将字符串分解为各个部分时内存不足。我知道这不是功能;它可以在JUnit测试中独立工作,并且程序本身不是非常占用内存。在这一点上,它只是设置目录并将它们存储到一个“DataBank”类中——没什么大不了的,只是一个存储一串字符串的类

我想找出问题的原因;我可以在代码停止时使用有效的不同类进行回复

但是,一个更简单的解决方案可能只是使用
File.mkdirs()
。什么会导致
File.mkdirs()
不创建目录?只是权限不够吗

如果可以的话,我想简化这个过程,而不是试图重新发明轮子。但同时,我知道程序不应该耗尽内存——我正在存储字符串并执行文件操作,而不是超密集型操作

但是,更简单的解决方案可能只是使用File.mkdirs()。什么会导致File.mkdirs()不创建目录?只是权限不够吗?

File.mkdirs()
可能由于
File.mkdir()
失败的任何原因而失败(由于父目录不存在而失败的原因除外)

从:

public boolean mkdirs()

创建以此抽象路径名命名的目录,包括任何必要但不存在的父目录请注意,如果此操作失败,它可能成功创建了一些必要的父目录

粗体部分表示,
mkdirs()
只是多个调用
mkdir()
的快捷方式

-它有效地调用目录层次结构中的
mkdir()

public boolean mkdirs() {
    if (exists()) {
        return false;
    }
    if (mkdir()) {
        return true;
    }
    File canonFile = null;
    try {
        canonFile = getCanonicalFile();
    } catch (IOException e) {
        return false;
    }

    File parent = canonFile.getParentFile();
    return (parent != null && (parent.mkdirs() || parent.exists()) &&
            canonFile.mkdir());
}

你说:“问题是,实际的程序在尝试循环并将字符串分解为单独的部分时内存不足。”然后你说:“我知道这不是函数;它在JUnit测试中自己可以完美地工作。那么你的第一句话就不准确了(是吗?)。在任何情况下,我们都需要您发布代码以提供帮助。您可以使用
File.mkdirs()
,这是对的。您不会通过单独创建目录来“智胜”它-这只是说它可能会因某些i/o错误而失败(最有可能是权限)。如果
mkdirs()
失败了,你尝试单独做这件事也会失败。将你的问题减少到失败的几行代码,最好是提供一个测试用例。没有人关心你的生活故事或你的应用程序-这与实际问题无关,而且页面上有很多噪音。阅读一个指针:除了明显需要显示你的代码之外,如果您的应用程序与问题完全无关,您不需要为我们提供应用程序的上下文段落(并且在许多情况下,可能实际上会使人们不愿意提供帮助)。谢谢大家的宝贵意见。@GregKopff-我应该说得更清楚一些。当我从Main调用带有参数的静态函数时,程序内存不足。但是,我认为这是一个环境问题,我已经纠正了。不过,我只是切换到使用File.mkdirs()-现在头疼的事少多了。波希米亚人-谢谢你的SSCCE链接;我会确保我未来的帖子符合这个要求。马克-谢谢你的提示。我会记住的。