3

オペレーティング システムが Windows の場合、Java でコーディングするのに最適な方法は次のうちどれですか?

1)

 String f = "some\\path\\file.ext"; 
2)
 String f = "some/path/file.ext"; 
3)
  String f = "some"+File.separator+"path"+File.separator+"file.ext"; 
4)
 String f = new StringBuilder("some").append(File.separator).append("path").append(File.separator).append("file.ext").toString(); 

4

3 に答える 3

9

編集:コメントを考えると、明確にする必要があります。これは間違いなく文脈に依存します。あなたは何をしようとしているのですか?「ネイティブ」オペレーティング システム形式でファイル パスを作成しようとしている場合は、次のようにオプション 5 を使用しますFile

File f = new File("some");
f = new File(f, "path");
f = new File(f, "file.ext");

または、このロジックをメソッドに入れます。

public static File newFile(String root, String... parts) {
    // TODO: Check that nothing's null (root, parts, each element of parts)
    File ret = new File(root);
    for (String part : parts) {
        ret = new File(ret, part);
    }
    return ret;
}

次に、次のように呼び出すことができます。

File f = SomeUtilityClass.newFile("some", "path", "file.ext");

(これは最近の JRE のどこかに存在する可能性がありますが、もしそうならどこにあるかはわかりません。)

FileInputStreamなどで機能するものだけ必要な場合は、次の 2 つの理由から、スラッシュをハードコードするだけです。

  • バックスラッシュより読みやすい
  • 他のオペレーティング システムでも動作します

いずれにせよFile、値に明確な意味を与えるため、おそらく を作成します。Java のほとんどの IO API は、必要に応じて を受け入れます。これにより、これファイル パスFileであることが、周囲のすべてのコードに明らかになります。したがって、次を使用できます。

File file = new FIle("some/path/file.ext");

...そして、それはWindowsでも機能します。File.getCanonicalFile必要に応じて、スラッシュではなくバックスラッシュを使用して正規表現を取得するために使用できます。

于 2013-05-19T07:14:19.013 に答える
3

Jon Skeet\は正しいですが、Microsoftはコマンド インタープリターのみでの使用を義務付けていると言いたいです。API のあらゆる場所で使用できます/

したがって、起動されたプログラムString f = "some/path/file.ext";が.ProcessBuildercmd.exe

パスを変換するには、使用しますString.replaceAll( "\\\\", "/" );

于 2013-05-19T07:18:22.560 に答える
1

多くの場合、パスはプロパティ ファイルに保存されます。私が使用したほとんどのアプリケーションでは、常に代替 2 を使用してきました。

その理由の 1 つは、Windows と Linux の間で見た目が似ていることです。

/パスまたは C:/パス

また、最もクリーンで読みやすい代替手段でもあります。

于 2013-05-19T07:31:25.573 に答える