android 本地地址转换为url,android本地mipmap图片转url、绝对路径转URL URL URI File Path 转换...

标签: url uri file path

File to URI:

File file = ...;

URI uri = file.toURI();

File to URL:

File file = ...;

URL url = file.toURI().URL();

URL to File:

URL url = ...;

File file = new Path(url.getPath()).toFile();

URI to URL:

URI uri = ...;

URL url = uri.toURL();

URL to URI:

URL url = ...;

URI uri = url.toURI();

一般情况下采用上述方式都可以安全的使用.

但是, 当处理本地路径且有空格,或者特殊字符,比如汉字等. 路径在相互的转换过程中, 可能会出现转换的无效字符错误异常.

所以, 可以使用Eclipse提供的工具类org.eclipse.core.runtime.URIUtil (插件: org.eclipse.equinox.simpleconfigurator)来进行转换.

URL URI File Path 转换(原创)

比如URL to File:

URL url = ...;

File file = URIUtil.toFile(URIUtil.toURI(url));

当URL, URI直接互相转换时,也可以使用该URIUtil工具类.

toURI

toURL

还有一个工具类,就是org.eclipse.core.runtime.FileLocator(插件: org.eclipse.equinox.common) 也可以对URL进行File的格式化. 比如toFileURL方法.

附源码:

package org.eclipse.equinox.internal.simpleconfigurator.utils;

import java.io.File;

import java.net.*;

public class URIUtil {

private static final String SCHEME_FILE = "file"; //$NON-NLS-1$

private static final String UNC_PREFIX = "//"; //$NON-NLS-1$

public static URI append(URI base, String extension) {

try {

String path = base.getPath();

if (path == null)

return appendOpaque(base, extension);

//if the base is already a directory then resolve will just do the right thing

if (path.endsWith("/")) {//$NON-NLS-1$

URI result = base.resolve(extension);

//Fix UNC paths that are incorrectly normalized by URI#resolve (see Java bug 4723726)

String resultPath = result.getPath();

if (path.startsWith(UNC_PREFIX) && (resultPath == null || !resultPath.startsWith(UNC_PREFIX)))

result = new URI(result.getScheme(), "///" + result.getSchemeSpecificPart(), result.getFragment()); //$NON-NLS-1$

return result;

}

path = path + "/" + extension; //$NON-NLS-1$

return new URI(base.getScheme(), base.getUserInfo(), base.getHost(), base.getPort(), path, base.getQuery(), base.getFragment());

} catch (URISyntaxException e) {

//shouldn't happen because we started from a valid URI

throw new RuntimeException(e);

}

}

private static URI appendOpaque(URI base, String extension) throws URISyntaxException {

String ssp = base.getSchemeSpecificPart();

if (ssp.endsWith("/")) //$NON-NLS-1$

ssp += extension;

else

ssp = ssp + "/" + extension; //$NON-NLS-1$

return new URI(base.getScheme(), ssp, base.getFragment());

}

public static URI fromString(String uriString) throws URISyntaxException {

int colon = uriString.indexOf(':');

int hash = uriString.lastIndexOf('#');

boolean noHash = hash < 0;

if (noHash)

hash = uriString.length();

String scheme = colon < 0 ? null : uriString.substring(0, colon);

String ssp = uriString.substring(colon + 1, hash);

String fragment = noHash ? null : uriString.substring(hash + 1);

//use java.io.File for constructing file: URIs

if (scheme != null && scheme.equals(SCHEME_FILE)) {

File file = new File(uriString.substring(5));

if (file.isAbsolute())

return file.toURI();

scheme = null;

if (File.separatorChar != '/')

ssp = ssp.replace(File.separatorChar, '/');

}

return new URI(scheme, ssp, fragment);

}

public static boolean sameURI(URI url1, URI url2) {

if (url1 == url2)

return true;

if (url1 == null || url2 == null)

return false;

if (url1.equals(url2))

return true;

if (url1.isAbsolute() != url2.isAbsolute())

return false;

// check if we have two local file references that are case variants

File file1 = toFile(url1);

return file1 == null ? false : file1.equals(toFile(url2));

}

public static File toFile(URI uri) {

try {

if (!SCHEME_FILE.equalsIgnoreCase(uri.getScheme()))

return null;

//assume all illegal characters have been properly encoded, so use URI class to unencode

return new File(uri);

} catch (IllegalArgumentException e) {

//File constructor does not support non-hierarchical URI

String path = uri.getPath();

//path is null for non-hierarchical URI such as file:c:/tmp

if (path == null)

path = uri.getSchemeSpecificPart();

return new File(path);

}

}

public static String toUnencodedString(URI uri) {

StringBuffer result = new StringBuffer();

String scheme = uri.getScheme();

if (scheme != null)

result.append(scheme).append(':');

//there is always a ssp

result.append(uri.getSchemeSpecificPart());

String fragment = uri.getFragment();

if (fragment != null)

result.append('#').append(fragment);

return result.toString();

}

public static URI toURI(URL url) throws URISyntaxException {

//URL behaves differently across platforms so for file: URLs we parse from string form

if (SCHEME_FILE.equals(url.getProtocol())) {

String pathString = url.toExternalForm().substring(5);

//ensure there is a leading slash to handle common malformed URLs such as file:c:/tmp

if (pathString.indexOf('/') != 0)

pathString = '/' + pathString;

else if (pathString.startsWith(UNC_PREFIX) && !pathString.startsWith(UNC_PREFIX, 2)) {

//URL encodes UNC path with two slashes, but URI uses four (see bug 207103)

pathString = UNC_PREFIX + pathString;

}

return new URI(SCHEME_FILE, null, pathString, null);

}

try {

return new URI(url.toExternalForm());

} catch (URISyntaxException e) {

//try multi-argument URI constructor to perform encoding

return new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());

}

}

public static URL toURL(URI uri) throws MalformedURLException {

return new URL(uri.toString());

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORACLE数据库导出导入数据

准备工作&#xff1a; 1、登录管理员system 2、create directory dbdata as C:\oracle\tempData;--创建备份文件夹 3、grant read,write on directory dbdata to gsjk2018;--授权读写为用户 --导出(每次修改文件名)expdp gsjk2018/gsjk2018_vimtech10.0.73.32:1521/orcl direct…

linux sed名宁,Linux shell利用sed批量更改文件名的方法

微子网络与大家分享了在Linux shell中使用sed批量更改文件名的方法。希望你看完这篇文章有所收获。大家一起讨论一下。示例去除特定字符目标&#xff1a;把2017-01-01.jpg和2018-01-01.jpg变成20170101.jpg和20180101.jpg方法&#xff1a;用空值替换全部for filein ls | grep …

android手机给iphone越狱,一台ROOT后的安卓手机:可以用来给iOS 13越狱了

iOS 13时代的越狱工具主要包括unc0ver和Checkra1n两款&#xff0c;前者最新的v4.2.1版本已经支持A9到A13设备从除了支持的设备和系统多&#xff0c;unc0ver的一大优势在于可在iOS设备上独立完成越狱操作&#xff0c;Checkra1n则需要借助电脑&#xff0c;包括重启失效后也是如此…

502 Bad Gateway The server returned an invalid or incomplete response

问题描述&#xff1a;最近在登陆某大学网站时&#xff0c;网站如下&#xff1a; https://yzb.tju.edu.cn/ 发现登录不进去&#xff0c;报了502 Bad Gateway The server returned an invalid or incomplete response这个错误。 问题解决&#xff1a;将https改为http&#xff0…

iOS VIPER架构(三)

路由是实现模块间解耦的一个有效工具。如果要进行组件化开发&#xff0c;路由是必不可少的一部分。目前iOS上绝大部分的路由工具都是基于URL匹配的&#xff0c;优缺点都很明显。这篇文章里将会给出一个更加原生和安全的设计&#xff0c;这个设计的特点是&#xff1a; 路由时用p…

android camera滑动,Android怎么实现小米相机底部滑动指示器

Android怎么实现小米相机底部滑动指示器发布时间&#xff1a;2021-04-15 14:39:38来源&#xff1a;亿速云阅读&#xff1a;94作者&#xff1a;小新这篇文章给大家分享的是有关Android怎么实现小米相机底部滑动指示器的内容。小编觉得挺实用的&#xff0c;因此分享给大家做个参考…

laravel安装laravel-ide-helper扩展进行代码提示(二)

一、扩展的地址 https://github.com/barryvdh/laravel-ide-helper二、安装扩展 1、引入库&#xff1a; composer require barryvdh/laravel-ide-helper composer require doctrine/dbal如果只想在开发环境上使用&#xff0c;请加上--dev composer require --dev barryvdh/larav…

android md 颜色,安卓MD(Material Design)规范

Md规范是一种设计风格&#xff0c;并不特指规范。是一种模拟纸张的手法。一、核心思想把物理世界的体验带进屏幕。去掉现实中的杂质和随机性&#xff0c;保留其最原始纯净的形态、空间关系、变化与过度&#xff0c;配合虚拟世界的灵活特性&#xff0c;还原最贴近真实的体验&…

Mariadb修改root密码

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;新安装的 mariadb 的密码为空&#xff0c;在shell终端直接输入 mysql 就能登陆数据库。 如果是刚安装第一次使用&#xff0c;请使用 mysql_secure_installation 命令初始化。 # mysql_secure_inst…

【译】Googler如何解决编程问题

本文是Google工程师Steve Merritt的一篇博客&#xff0c;向大家介绍他自己和身边的同事解决编程问题的方法。 原文地址&#xff1a;blog.usejournal.com/how-a-googl… 在本文中&#xff0c;我将完整的向你介绍一种解决编程问题的策略&#xff0c;这个策略是我在日常工作中一直…

自学html和css,学习HTML和CSS的5大理由

描述人们学习HTML和CSS最常见的原因是开始从事web开发。但并不是只有web开发人员才要学习HTML和CSS的核心技术。作为一个网络用户&#xff0c;你需要你掌握的相关技术很多&#xff0c;但下面有5个你无法拒绝学习HTML和CSS的理由。1、轻松制作卡通动画Web上的动画很多年来都是使…

html 左侧 树形菜单,vue左侧菜单,树形图递归实现代码

学习vue有一段时间了&#xff0c;最近使用vue做了一套后台管理系统&#xff0c;左侧菜单需求是这样的&#xff0c;可以多层&#xff0c;数据由后台传递。也因为自己对官方文档的不熟悉使得自己踩了不少坑&#xff0c;今天写出来和大家一起分享。效果图如下所示&#xff1a;先说…

Node.js的基本使用3

koa(扩展知识&#xff0c; 建议学习) koa是express超集&#xff08;进阶版&#xff09;前后端分离和耦合概念介绍 面向过程 -》 面向对象 --》 面向服务数据库 Node.js mongodb(bson json的超集) 分类&#xff1a; 关系型数据库&#xff1a; MySql非关系型数据库: MongoDB Mong…

Flutter的滚动以及sliver约束

Flutter框架中有很多滚动的Widget,ListView、GridView等&#xff0c;这些Widget都是使用Scrollable配合Viewport来完成滚动的。我们来分析一下这个滚动效果是怎样实现的。 Scrollable在滚动中的作用 Scrollable继承自StatefulWidget&#xff0c;我们看一下他的State的build方法…

页面增加html,为静态页面HTML增加session功能

一般来说&#xff0c;只有服务器端的CGI程序(ASP、PHP、JSP)具有session会话功能&#xff0c;用来保存用户在网站期间(会话)的活动数据信息&#xff0c;而对于数量众多的静态页面(HTML)来说&#xff0c;只能使用客户端的cookies来保存临时活动数据&#xff0c;但对于cookies的操…

关于Istio 1.1,你所不知道的细节

本文整理自Istio社区成员Star在 Cloud Native Days China 2019 北京站的现场分享 第1则 主角 Istio Istio作为service mesh领域的明星项目&#xff0c;从2016年发布到现在热度不断攀升。 Istio & Envoy Github Star Growth 官网中Istio1.1的架构图除了数据面的Envoy和控制面…

html调用父页面的函数,js调用父框架函数与弹窗调用父页面函数的方法

调用父级中的 aaa的函数子页面中:οnclick"window.parent.frames.aaa()"父页面中:function aaa(){alert(‘bbbbb’);}----------------------------------------------frame框架里的页面要改其他同框架下的页面或父框架的页面就用parentwindow.opener引用的是window.…

读卡距离和信号强度两方面来考虑

选择物联宇手持终端机的时候&#xff0c;你可以参考以下几个原则&#xff1a;选择行业需要应用功能&#xff0c;能有效控制好预算。屏幕界面需要高清晰的&#xff0c;选用分辨率较高的能更好的支持展现。按照项目所需求的来分析&#xff0c;需要从读卡距离和信号强度两方面来考…

html script 放置位置,script标签应该放在HTML哪里,总结分享

几年前&#xff0c;有经验的程序员总是让我们将很明显&#xff0c;现在浏览器有了更加酷的兼容方式&#xff0c;这篇文章&#xff0c;俺将跟大家一起来学习script标签的async和defer新特性&#xff0c;探讨script应该放在哪里更好。页面加载方式在我们讨论当浏览器加载带有获取…

2021吉林高考26日几点可以查询成绩,2021吉林高考成绩查分时间及入口

2021吉林高考成绩查分时间及入口2021吉林高考成绩查分时间及入口&#xff0c;有一些高考生真的很积极&#xff0c;考完试当天就将答案给对好了&#xff0c;考试嘛&#xff0c;站在旁观者的角度来看总是有人欢喜有人忧。估出来分数不咋地的&#xff0c;整个六月就毁了。2021吉林…