【问题标题】:Check if Url refers to file or DIrectory. (HTTP)检查 Url 是指文件还是目录。 (HTTP)
【发布时间】:2012-12-31 10:39:16
【问题描述】:

我如何确定一个 url 是指一个文件还是一个目录。链接http://example.com/test.txt 应该返回它是一个文件http://example.com/dir/ 是一个目录

我知道你可以用 Uri 类做到这一点,但这个对象 IsFile 函数只适用于 file:/// 方案。我正在使用 http:// 方案。有什么想法吗?

谢谢

【问题讨论】:

  • 你的意思是服务器端?使用什么语言/框架?
  • JAVA 安卓。我想制作一个可以显示任何类型文档的应用程序。我不可以通过 shouldOverRideURLLoading() 来完成,我在其中检查 .PDF 或 .DOC 等。如果有任何其他方法可以用于此目的,我不想这样做。我的意思是除了扩展名之外,URL中还有其他信息吗??
  • 我不是 java/android 人。我在您的问题中添加了正确的标签,因此其他人会选择它...
  • 使用 URL.getPath() 我可以检索 url 中的路径。但是我必须再次为扩展设置搜索条件。我认为没有其他方法可以确定 url 是文件还是目录。

标签: java android file url


【解决方案1】:

我不知道为什么这个问题很长一段时间都没有得到回答/被忽视。我在服务器端 java 中遇到了同样的情况(估计 Android 风格的情况类似)。唯一的输入信息是资源的 URL,我们需要判断资源是目录还是文件。所以这是我的解决方案。

if ("file".equals(resourceUrl.getProtocol())
    && new File(resourceUrl.toURI()).isDirectory()) {
    // it's a directory
}

希望这对下一位读者有所帮助。

注意:请参阅@awwsmm 评论。提供上述答案时,这是我的假设。基本上,测试远程资源是否是目录或任何东西是没有意义的。完全由网站决定为每个请求返回什么。

【讨论】:

  • 没错。或者您可以检查路径中的最后一个元素是否有扩展名?
  • 感谢 Debosmit 的评论。那将是最有效的方法,但恕我直言不可靠。在 *nix 系统和可能的 Windows 中,普通文件可以不带扩展名而存在。
  • 是的。正是我写评论时的想法。 :p
  • OP 明确表示这只适用于file://,他们正在尝试使用http://
【解决方案2】:

它不起作用,因为协议是 http:// 而不是 file://。

 class TestURL{
   public static boolean isDirectory(URL resourceUrl){
     if ("file".equals(resourceUrl.getProtocol())
       && new File(resourceUrl.toURI()).isDirectory()) {
        true;
     }
     return false;
   }
   public static void main(String[] args){
     System.out.println(TestURL.isDirectory("http://example.com/mydir/"));
   }
 }

【讨论】:

    【解决方案3】:

    我认为目录http://example.com/some/dir 会重定向到http://example.com/some/dir/,文件不会。

    即可以检查 HEAD 响应中的 http Location 字段:

    $ curl -I http://example.com/some/dir | grep Location
    Location: http://example.com/some/dir/
    

    【讨论】:

    • 我不会对此投反对票,但这只适用于某些 Web 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 2011-05-31
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2018-12-18
    相关资源
    最近更新 更多