java - 在Java中创建路径的速记?
问题描述
我有一个代码示例,它创建这样的路径:
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();
}
解决方案
第一个想法:你为什么要打扰File.separator
?请改用跨平台系统独立文件分隔符/
。
String path = System.getProperty("user.dir") + "/games/game.exe";
for 的唯一用途File.separator
是如果您正在为用户界面构建文件路径,并且想要向用户显示路径字符串,并且不想通过在路径中混合 / 和 \ 来混淆 Windows 用户。
第二个想法:除非您有令人信服的理由使用字符串,否则请使用Paths.get。令人信服的原因包括保持向后兼容 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);
}
推荐阅读
- python - optimize_for_inference_lib.optimize_for_inference 不融合 batchnorm 层?
- excel - 使用“Ctrl+P”或“文件 - 打印”时,在显示打印预览之前不会调用 Workbook.BeforePrint 事件 (Excel)
- javascript - 将日期对象打印到控制台
- python - Boost Python 暴露 C++ 类,构造函数采用 std::list
- kubernetes - 将 Kubernetes 服务帐号连接到 Google Cloud 服务帐号
- ramda.js - 只运行一次地图,ramda js
- php - 字符串变量比较与php中的值失败
- c# - 是否可以使用 OLEDB 从包含图像的 excel 文件中读取文本?
- ios - 改变闭包外的变量
- json - JSON 无法处理 numpy 的 float128 类型