java通过url来下载的文件如何将默认文件名不是路径
Java是一种面向对象的编程语言,被广泛应用于各种领域。在Java中,通过URL来下载文件是一项非常常见的操作。但有时候我们会发现下载下来的文件名不是我们想要的,本文将介绍如何解决这个问题。
获取文件名
在Java中,我们可以通过URLConnection类来获取文件的信息,包括文件名。具体操作如下:
- 使用URL对象创建连接
- 使用URLConnection对象打开连接
- 获取文件名
代码示例:
URL url = new URL("http://example.com/file.zip"); URLConnection conn = url.openConnection(); String disposition = conn.getHeaderField("Content-Disposition"); String fileName = ""; if (disposition != null) { int index = disposition.indexOf("filename="); if (index > 0) { fileName = disposition.substring(index + 10, disposition.length() - 1); } } else { fileName = url.getFile(); fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); }
下载文件
获取到文件名后,我们就可以开始下载文件了。具体操作如下:
- 使用URL对象创建连接
- 使用URLConnection对象打开连接
- 获取输入流
- 创建输出流
- 循环读取输入流并写入输出流
- 关闭输入流和输出流
代码示例:
URL url = new URL("http://example.com/file.zip"); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); String fileName = ""; // 获取文件名 ... OutputStream out = new FileOutputStream(fileName); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close();
完整代码
将获取文件名和下载文件的代码整合起来,就可以得到完整的代码:
URL url = new URL("http://example.com/file.zip"); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); String disposition = conn.getHeaderField("Content-Disposition"); String fileName = ""; if (disposition != null) { int index = disposition.indexOf("filename="); if (index > 0) { fileName = disposition.substring(index + 10, disposition.length() - 1); } } else { fileName = url.getFile(); fileName = fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()); } OutputStream out = new FileOutputStream(fileName); byte[] buffer = new byte[1024]; int len = 0; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close();
通过以上操作,我们可以轻松地通过URL来下载文件,并且保证文件名正确。希望本文能够对您有所帮助。
相关文章
发表评论