# file协议

今天在写spring包扫描实现的时候，要扫描包下的所有class文件。然后我要根据classpath创建一个绝对路径的File对象，所以想到了File的`new File(new URI("file:///path"))`构造。中间遇到了一些坑，特意去了解了一下 `file:///`这个协议。

file协议中文名称为**本地文件协议，通常用于**访问计算机中的本地文件\*\*。我们可以通过向浏览器或者文件管理器输入协议，来查看磁盘中的文件：

![pasted-0](https://2351062869-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F7b2CdwBN9liniVJpfEAc%2Fuploads%2Fgit-blob-db5a18f9f0214fbfba43ae516e2db99e94858d65%2F20190429103742214_21639.png?alt=media)

因为file协议本身是一种协议，所以，它也遵循uri规则：

```
scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
```

因为host部分不存在，所以，file协议的uri可以写为：

```
file:/path  #准确，此标准称作CURIE， 如果‘/’去除，代表相对路径
或者 
file:///path
```
