【问题标题】:Opening a file in Java inside a directory specified by wildcard characters在通配符指定的目录中用 Java 打开文件
【发布时间】:2011-09-21 22:16:31
【问题描述】:

在 Java 中,当尝试如下创建文件对象时,是否可以使用通配符指定目录?

File newFile = new File("\temp\*\path");

在这种情况下,目录是由我无权访问的其他代码部分创建的,它在名称中添加了时间戳。所以如果我可以用 * 代替时间戳,问题就会解决,比如

 File newFile = new File("\temp\dirname-*\path");  // * is timestamp when directory was created.

感谢您的帮助。

【问题讨论】:

    标签: java file wildcard


    【解决方案1】:

    如果你是一名程序员,你应该知道像“我确信那个地方存在一个目录”这样的陈述在它们为假之前都是真的(它们在一点)。

    检查\temp\,确认只有一个目录,然后用正确的路径打开文件。然后,当前提条件不成立时,您可以抛出异常或显示消息。

    【讨论】:

    • 好吧,问题是该目录是由其他人的代码创建的,它在我运行我的代码之前运行。此外,只有在创建目录的第一个块成功运行时,我才能运行我的代码。所以我确定该目录存在,并且我没有尝试访问任何随机目录。
    • @rgamber,那如果不是随机目录,为什么还需要 '*' :)?
    • @AndreyAdamovich,目录名称基于时间戳。我不能准确地假设创建时间。虽然如果我能够在时间戳所在的位置放置一个通配符,那么问题就解决了。我应该在问题中提到这一点!
    • 您说它是“基于”时间戳的-您可以可靠地知道它的任何部分吗?例如。如果它将是temp\dir1234567\path,那么您可以查找名称以“dir”开头的 temp 子文件夹
    • 是的..它类似于 temp\dir-1234567\path\file。这就是为什么我试图放一个 *: temp\dir-*\path\file.
    【解决方案2】:

    按照您的描述创建它是不可能的。但是,可以编写一个算法来搜索符合描述的文件。在您的情况下,您可能希望创建一个new File("temp"),然后递归搜索其子项(使用listFiles 查找isDirectory 方法返回true 的任何文件)以查找名为"path" 的文件。

    【讨论】:

      【解决方案3】:

      不,Java 中不能在文件名中使用通配符。

      您需要自己解决路径,但这并不难。

      你可能会发现

      new java.io.File("/tmp").listFiles();
      

      一个有趣的起点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-15
        • 2018-10-30
        • 1970-01-01
        • 2016-10-26
        • 2022-01-16
        • 2011-06-28
        • 2022-12-17
        相关资源
        最近更新 更多