Java:从FilePath获取URI

时间:2011-11-30 09:35:52

标签: java url uri filepath

我对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来帮助我。

5 个答案:

答案 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 . . .