
JAVA通过URL接口获取文件名和类型的代码实现

"这篇文章主要介绍了如何使用JAVA通过Url接口获取文件的名称和类型。方法是通过建立URL连接,解析响应头中的字段,特别是'Content-Disposition'字段,从中提取出文件名和类型信息。"
在Java编程中,有时我们需要从一个Url接口获取文件的相关信息,比如文件的名称和类型。这个过程可以通过解析Http响应头来实现。以下是一种可行的方法:
首先,我们创建一个名为`getFileName`的静态方法,接收一个Url字符串作为输入参数:
```java
public static String getFileName(String url) {
String fileName = "";
boolean isOk = false;
```
接着,我们创建一个URL对象并打开连接:
```java
try {
URL myURL = new URL(url);
URLConnection conn = myURL.openConnection();
if (conn == null) {
return null;
}
```
然后,我们获取连接的Header Fields,这包含了文件的相关元数据:
```java
Map<String, List<String>> hf = conn.getHeaderFields();
if (hf == null) {
return null;
}
```
接下来,遍历所有的Header Field键值对,寻找包含文件名信息的`Content-Disposition`字段:
```java
Set<String> key = hf.keySet();
if (key == null) {
return null;
}
for (String skey : key) {
List<String> values = hf.get(skey);
for (String value : values) {
// ...
```
在这个循环中,我们尝试将Header Field的值从ISO-8859-1编码转换为GBK编码,因为某些服务器可能使用不同的字符编码:
```java
String result;
try {
result = new String(value.getBytes("ISO-8859-1"), "GBK");
int location = result.indexOf("filename");
if (location >= 0) {
result = result.substring(location + "filename".length());
fileName = result.substring(result.indexOf("=") + 1);
isOk = true;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// ...
```
如果找到并解析出了文件名,设置`isOk`为`true`并跳出循环:
```java
if (isOk) {
break;
}
}
}
```
处理完所有Header Field后,我们检查是否成功获取了文件名:
```java
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 如果没有找到文件名,返回空
if (fileName == null || "".equals(fileName)) {
return null;
}
return fileName;
}
```
这个方法的主要思路是利用`URLConnection`来获取Url的响应头,然后分析其中的`Content-Disposition`字段。这个字段通常会包含文件的原始名称和类型信息,例如`attachment; filename="example.txt"`。通过解析这个字段,我们可以获取到文件的实际名称。
请注意,这种方法依赖于服务器返回的Header信息,不同服务器可能会有不同的实现,因此在实际应用中可能需要进行更多的异常处理和兼容性调整。此外,获取文件类型可能还需要解析`Content-Type`字段,但上述代码并未涉及这部分。如果需要获取文件类型,可以添加类似逻辑来解析`Content-Type`。
相关推荐







lihr1993
- 粉丝: 1
最新资源
- Asp.net试题库管理系统源码参考与分析
- Java实现23种设计模式详解及代码示例
- 深入了解WCF:构建聊天室软件案例分析
- RTX WEB实现部门自主管理 提升工作效率
- 掌握SQLServer2005:数据库查询性能提升攻略
- 掌握HideWnd:轻松自定义快速隐藏桌面窗口工具
- 掌握ASP.NET 2.0与C# 2005开发动态网站的基础
- 深入理解nachos小型操作系统项目
- Hibernate Api介绍与资源索引
- Red Hat Linux 9.0基础教程详解
- 探索SharePoint 2007:演示文稿共享与管理新功能
- 掌握GridView使用技巧:实例详解
- 探索Linux 1.0源代码的历史与价值
- JavaEE学习实践:Struts2与Hibernate整合实现网上银行模拟
- Cypress USB编程实用程序的详细介绍与应用
- 掌握C/C++编程技巧,以实例提升开发能力
- C++编程新手指南:高级程序员的实践经验
- 利用CSS和JavaScript实现网页中的jQuery随机头像
- 完整网上订购系统教程:JSP+JavaBean实现
- Castle AR技术深入学习与实践
- Java程序员基础入门指南
- VB印刷行内软件包:一键设定多种印刷种类
- Silverlight2.0动态相册源码分享与下载指南
- Firebird数据库链接库(dll)文件的安装与应用