我对Java知之甚少。我需要在Windows上从FilePath(String)
构造一个URI的字符串表示。有时我得到的inputFilePath
是:file:/C:/a.txt
,有时它是:C:/a.txt
。现在,我正在做的是:
new File(inputFilePath).toURI().toURL().toExternalForm()
上述方法适用于没有file:/
前缀的路径,但对于前缀为file:/
的路径,。toURI
方法通过附加将其转换为无效的URI当前dir的值,因此路径变为无效。
请通过建议正确的方法为这两种路径获取正确的URI来帮助我。
答案 0 :(得分:12)
这些是有效的文件uri:
file:/C:/a.txt <- On Windows
file:///C:/a.txt <- On Windows
file:///home/user/a.txt <- On Linux
因此,您需要删除Windows的file:/
或file:///
和Linux的file://
。
答案 1 :(得分:5)
来自https://jaxp.java.net的SAXLocalNameCount.java:
/**
* Convert from a filename to a file URL.
*/
private static String convertToFileURL ( String filename )
{
// On JDK 1.2 and later, simplify this to:
// "path = file.toURL().toString()".
String path = new File ( filename ).getAbsolutePath ();
if ( File.separatorChar != '/' )
{
path = path.replace ( File.separatorChar, '/' );
}
if ( !path.startsWith ( "/" ) )
{
path = "/" + path;
}
String retVal = "file:" + path;
return retVal;
}
答案 2 :(得分:3)
只需使用Normalize();
示例:
path = Paths.get("/", input).normalize();
这一行将规范化所有路径。
答案 3 :(得分:1)
new File(String)
的参数是路径,而不是URI。因此,“但是”之后的帖子部分无效使用API。
答案 4 :(得分:0)
class TestPath {
public static void main(String[] args) {
String brokenPath = "file:/C:/a.txt";
System.out.println(brokenPath);
if (brokenPath.startsWith("file:/")) {
brokenPath = brokenPath.substring(6,brokenPath.length());
}
System.out.println(brokenPath);
}
}
提供输出:
file:/C:/a.txt
C:/a.txt
Press any key to continue . . .