【问题标题】:How to create a Path and a File that does not Exist in Java如何创建 Java 中不存在的路径和文件
【发布时间】:2014-04-05 00:15:13
【问题描述】:

这是我遇到的问题:如果部分或全部路径不存在,则服务器应根据需要在层次结构中创建其他目录,然后如上所述创建一个新文件。

Files.createDirectories(path);

这就是我目前正在使用的,但它不会创建最终文件。例如 path="/hello/test.html" 它将创建一个名为“hello”的目录和一个名为“test.html”的目录,我希望 test.html 是一个文件。我该怎么做?

【问题讨论】:

  • 发布您正在使用的实际代码,以便我们为您指明正确的方向。
  • 是的,看看@Matt 指出了什么,而且我发现Java 在我尝试过的每个系统上都可以使用正斜杠/ 分隔符——Unix、Mac、Windows,甚至路径类似于 volName:[topdir.subdir.otherdir]filename.txt 的 VMS
  • 谢谢伙计,我刚刚意识到 createDirectories 只创建目录而不是文件....

标签: java nio


【解决方案1】:

这就是我为解决这个“问题”或滥用库所做的。

Files.createDirectories(path.getParent());
Files.createFile(path);

第一行将获取父目录,所以假设这是我要创建的“/a/b/c/hello.txt”,父目录将是“/a/b/c/”。

第二个赞将在该目录中创建文件。

【讨论】:

    【解决方案2】:

    你看过javadoc吗? createDirectories 只创建...目录。如果您打算使用Files.createDirectories,请解析文件名,调用createDirectories 仅传递路径部分,然后创建一个传递整个路径的新文件。否则this 是更好的方法。

    Files.createDirectories(path.substring(0, path.lastIndexOf(File.separator)+1));
    File yourFile = new File(path);
    

    【讨论】:

    • 在@helloworld 的回答中查看我的评论 - 不要自己解析路径,已经有方法了。
    • 正如我在回答中所说,“如果您打算使用 Files.createDirectories... 否则...”
    【解决方案3】:
      1234563 。
    1. 如果您知道什么时候 a) 创建目录 b) 创建目录和文件,则可以传递用于描述是否需要创建文件的布尔变量。

    【讨论】:

    • 最好使用File.separator 而不是硬编码'/'。
    • 你说得对,我的意图是让用户至少先使用该方法,然后才能更好地增强它。
    • 您不必先解析,您只需执行 file = new File(somepath) 因为 File 表示路径 可以的文件(但不'不一定)存在。然后使用file.getCanonicalPath() 获取 only 它的路径部分,其中所有诸如“foo/../bar”之类的东西都已经解决。然后在 that 上调用 createDirectories。
    • @helloworld 如果是这样,那为什么还要提到分隔符呢?承认你的错误而不是合理化它。
    猜你喜欢
    • 2010-11-22
    • 2022-12-20
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2012-06-10
    相关资源
    最近更新 更多