【发布时间】:2011-03-24 00:48:38
【问题描述】:
我想在 java 中编写一些代码来确定给定的 url 是文件还是目录。我该怎么做??
【问题讨论】:
我想在 java 中编写一些代码来确定给定的 url 是文件还是目录。我该怎么做??
【问题讨论】:
URL 本身没有“文件”或“目录”的概念。 URL 的内容由服务器在请求时响应的任何内容定义。如果您获得 MIME 类型为 application/pdf 的内容,则 URL 表示 PDF 文件。如果你得到其他任何东西,那么它不是 PDF 文件。
【讨论】:
在任何 URL / URI 规范、HTTP 规范或 MIME 类型注册表中都没有“目录”的概念。
因此,网络服务器无法告诉客户端 URL 解析为目录......即使它知道这意味着什么。 (在许多情况下,网络服务器并不知道/关心目录本身;例如,典型的 RESTful Web API 无法识别这个概念。)
您的选择是:
尝试获取内容并查看您获得的内容类型。但请记住,网络服务器可能会将“目录”呈现为任何内容......因此(通常)不可能以这种方式可靠地区分目录和非目录。
如果您想避免下载文件,可以发送 HEAD 请求而不是 GET 请求。这需要使用成熟的 HTTP 客户端库而不是 URLConnection。
更改您的应用程序设计和实现,以便不需要“目录”概念。
更改您的应用程序,以便 它 完全根据 URL 决定什么是“目录”和什么是“文件”。 (在一般情况下,这是行不通的......因为没有普遍遵守的 URL 名称部分约定可以让您进行区分。)
更改为使用 URL 方案/协议,其中“目录”是一个明确定义的概念。例如“文件:”或“ftp:”。
【讨论】:
从 URL 返回的内容本质上不是“文件”或“目录”。充其量,它是具有内容类型的数据流。它通常成为客户端的“文件”,通过将其保存到文件系统或仅用于显示的临时存储。基本上,Web 服务器无法使用 HTTP 告诉客户端某个目录是目录。
您要么必须创建一些客户端业务逻辑来推断“目录”(可能基于 URL,也许缺少文件扩展名?),要么为此使用不同的协议。
【讨论】: