日期:2014-05-17  浏览次数:20821 次

求问:java怎么获取HTTP下载文件的默认文件名。。谢谢
做一个java自动下载程序,下载方面已做好了,但是默认的文件名和后缀获取不到。

如这样一个URL

http://a.tgbus.com/download/33747/1

实际上下载下来是一个“银行大劫案BankJob.apk”文件。但是我在程序里面获取不到这个名字。

尝试获取了http头信息,使用的是HttpURLConnection.getHeaderFields(),但是获取到的信息如下

X-Powered-By:[ASP.NET]
X-AspNet-Version:[2.0.50727]
ETag:[BD8087CE545B83591454C74D7806A941]
Date:[Mon, 18 Jun 2012 06:35:12 GMT]
Content-Type:[application/vnd.android.package-archive]
null:[HTTP/1.0 200 OK]
Age:[4230]
Cache-Control:[public, max-age=31536000]
Connection:[keep-alive]
Content-Length:[12198650]
Expires:[Tue, 18 Jun 2013 06:35:12 GMT]
Accept-Ranges:[bytes]
X-Cache:[HIT from CT-GDSD-31-198.fastcdn.com]
Server:[Microsoft-IIS/6.0]

里面并没有文件名相关的内容。。。求问,这个文件名还有可能写在了什么地方?谢谢

------解决方案--------------------
看其他人的说法,得到启发,解决了,希望能对你有帮助 

URL testUrl = new URL("http://a.tgbus.com/download/33747/1");
  HttpURLConnection conn = (HttpURLConnection) testUrl.openConnection();
 conn.setFollowRedirects(true);
int ret = conn.getResponseCode();
String fn=URLDecoder.decode(conn.getURL().toString(),"UTF-8");
 System.out.println("------------"+ret+fn);
 System.out.println("------------"+ret+fn.substring(fn.lastIndexOf("/")+1));
InputStream in=conn.getInputStream();
InputStreamReader dis=new InputStreamReader(in);
 java.io.BufferedReader bf=new java.io.BufferedReader(dis);
 r=bf.readLine();
 int k=0;
 while(r!=null)
 {
 System.out.println(r);
 r=bf.readLine();
 k++;
 if(k>5)break;
 }
conn.disconnect();