检查给定路径是否指向某个子文件夹下的文件

时间:2017-03-14 12:34:29

标签: java path

作为用户的输入,我得到某个文件的路径。

只有当文件位于某个父文件夹中时,才允许用户访问此文件" User /"。

例如:

  • "用户/ 1/2/3"很好。
  • "用户/ 1 /../ 2"很好。
  • "用户/ 1 /../../ 2"不好(走到外面"用户/"文件夹)。
  • "父/../用户/ 1/2/3"很好。

有一种简单的方法可以用Java检查吗?

3 个答案:

答案 0 :(得分:1)

怎么样: -

boolean allowed = new File("the/path").getCanonicalPath().contains("User/");

答案 1 :(得分:0)

您可以从给定的路径名​​构造File并循环遍历File#getParent()链:

public boolean check(final String pathname) throws IOException {
    for(File target = new File(pathname).getCanonicalFile();
        null != target;
        target = target.getParentFile()) {

        if("User".equals(target.getName())) {
            return true;
        }
    }
    return false;
}

请记住使用File#getCanonicalFile()来解析给定的路径名​​。

答案 2 :(得分:-1)

您可以使用File#getCanonicalPath。下面你可以找到它的Javadoc的摘录。

  

返回此抽象路径名的规范路径名字符串。一个   规范路径名是绝对的和唯一的。准确的定义   规范形式的系统依赖于系统。此方法首先转换它   必要时路径名为绝对形式,就好像通过调用   getAbsolutePath()方法,然后将其映射到其中的唯一形式   系统相关的方式。 这通常涉及删除冗余名称   例如"。"和" .."从路径名,解析符号链接(在   UNIX平台),并将驱动器号转换为标准情况(on   Microsoft Windows平台)。