Android:从网址创建正确的文件名

时间:2017-10-27 13:29:21

标签: android file

我从许多网址下载文件。

e.g:

https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg
https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/0001.jpg
https://myhost2222/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg
https://myhost2222/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/0001.jpg

现在我需要将所有下载文件保存到Android本地文件夹。

但文件名必须是什么? 我想从URL创建文件名。 但URL包含文件名的禁用字符。所以...我想从url创建哈希(SHA-1)或者将URL转换为Base64。 这是一个很好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

从时间起制作名字:

String carTime = String.valueOf(System.currentTimeMillis());
String fileName=carTime.substring(carTime.length() - 4, carTime.length())+".jpg"

答案 1 :(得分:0)

我们的想法是使用与从中下载的URL相同的文件名保存文件。这样,在给定URL的文件系统(缓存)中很容易找到它(重建文件名)。

假设我们有URLhttps://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg

无效字符为:/,因此简单的String.replaceAll会删除这些字符

String filename = "https://myhost/sh/8n0wli4v5895jom/AAB2E0WA2fetPTLjWtYe5HjAa/00019.jpg".replaceAll(":\\/\\/|\\/", "");

filename变量等于:httpsmyhostsh8n0wli4v5895jomAAB2E0WA2fetPTLjWtYe5HjAa00019.jpg

当然,如果您希望自己可以而不是完全删除这些字符,则可以使用有效字符替换它们,例如-

答案 2 :(得分:0)

我认为如果你想要一个反向的方式,base64是一个很好的解决方案。

URL => FILENAME (encode base64)
FILENAME => URL (decode base64)

如果您只是将:\替换为空,则会丢失信息并且无法删除 从FILENAME

中检索原始网址

如果你使用哈希功能,那么你也会丢失信息(并且你会增加非常小的碰撞风险)

也许今天你不需要一个反向的解决方案,但明天的调试你不知道; - )

be carrefull:文件名有限制长度

编辑

另一种解决方案是简单地创建中间目录(仅用本地临时文件夹替换https://)