web-dev-qa-db-ja.com

Java:FilePathからURIを取得

Javaの知識はほとんどありません。 WindowsでFilePath(String)からURIの文字列表現を作成する必要があります。私が得るinputFilePathfile:/C:/a.txtであり、C:/a.txtです。今、私がやっていることは:

new File(inputFilePath).toURI().toURL().toExternalForm()

上記はfile:/のプレフィックスが付いていないパスに対しては正常に機能しますが、file:/のプレフィックスが付いたパスの場合、.toURIメソッドは値を追加することで無効なURIに変換します現在のディレクトリ、したがってパスは無効になります。

両方の種類のパスに対して適切なURIを取得する正しい方法を提案して、私を助けてください。

16
HarshG

有効なファイル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://を削除する必要があります。

12
gigadot

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;
}
5
Lyle Z

Normalize();を使用するだけです

例:

path = Paths.get("/", input).normalize();

この1行はnormalizeすべてのパスになります。

4
william.eyidi

new File(String)への引数は、URIではなくパスです。したがって、「しかし」の後の投稿の部分は、APIの無効な使用です。

2
user207421
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 . . .
0
Andrew Thompson