Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java创建路径的速记?_Java - Fatal编程技术网

用Java创建路径的速记?

用Java创建路径的速记?,java,Java,我有一个创建如下路径的代码示例: String path = System.getProperty("user.dir") + File.separator + "games" + File.separator + "game.exe"; 重复键入File.separator很烦人,也很困难。是否有较短的方法来创建路径?我创建了一个自定义函数来实现这一点,但我不确定这是否是正确的方法。请告知 //Ex. getPath(&qu

我有一个创建如下路径的代码示例:

    String path = System.getProperty("user.dir") + File.separator + "games" + File.separator + "game.exe";
重复键入
File.separator
很烦人,也很困难。是否有较短的方法来创建路径?我创建了一个自定义函数来实现这一点,但我不确定这是否是正确的方法。请告知

//Ex. getPath("downloads", "games", "racing.exe") ---> \downloads\games\racing.exe
public static String getPath(String...pathFragments){
    StringBuilder sb = new StringBuilder(File.separator);

    for(int i = 0; i < pathFragments.length-1; i++){
        sb.append(pathFragments[i] + File.separator);
    }

    //Append last pathFragment.
    sb.append(pathFragments[pathFragments.length-1]);

    return sb.toString();
}
//Ex.getPath(“下载”、“游戏”、“racing.exe”)-->\downloads\games\racing.exe
公共静态字符串getPath(字符串…pathFragments){
StringBuilder sb=新的StringBuilder(File.separator);
对于(int i=0;i
首先想到的是:你为什么要麻烦使用
文件.separator
?改用跨平台系统独立文件分隔符
/

String path = System.getProperty("user.dir") + "/games/game.exe";
File.separator
的唯一用途是为用户界面构建文件路径,并且希望向用户显示路径字符串,并且不希望通过在路径中混合/和\来混淆Windows用户

第二个想法:除非您有令人信服的理由使用字符串,否则请使用。令人信服的原因包括与Java或库的古老版本保持向后兼容

// You probably don't need to add System.getProperty("user.dir")
// Relative paths are resolved against current working directory
Path path = Paths.get("games/game.exe");
第三个想法:使用
String.join
而不是StringBuilder.append

public static String getPath(String... pathFragments) {
    return File.separator + String.join(File.separator, pathFragments);
}

您不需要函数,一旦使用
文件
路径
,则应很少使用
文件。分隔符
。例如,
Path.of()
就是您所需要的:

Path path = Path.of(System.getProperty("user.dir"), "games", "game.exe");
System.out.println("path="+path);

有些示例使用
Path.get()
,但这只是调用
Path.of()
。请注意,
Paths.of()
用于JDK11+,但是
Paths.get()
用于JDK7+。

会更容易。请参阅接口,在纯基于字符串的解决方案的情况下,您的方法也可以简化为
public static String getPath(String…pathFragments){return String.join(File.separator,pathFragments);}
BTW在您的原始方法中
sb.append(pathFragments[i]+File.separator)
应该是
sb.append(pathFragments[i]).append(File.separator)
以避免
+
表示串联,因为它需要装箱另一个StringBuilder,这会破坏
sb
的主要用途。或者使用分隔符设置为
File.separator
的StringJoiner,循环中只关注添加实际数据(File.separator将自动添加)忘记添加:-
Paths.of()
用于JDK11+,但是
Paths.get()
是JDK7+谢谢。因此,我使用File.separator。为什么你推荐String.join(…)而不是StringBuilder.append(…)?顺便问一下,有没有代码可以简单地找到game.exe文件而不必提及我做过的目录结构?String.join比String append好,因为一般来说代码越少,bug就越少,当标准库方法得到改进时,您还可以免费获得性能改进。至于在目录树中查找文件,您可以使用FileVisitor
Path path = Path.of(System.getProperty("user.dir"), "games", "game.exe");
System.out.println("path="+path);