我正在运行一些查看文件path的java代码,并searchpath中最后一个斜杠的索引。 我遇到的问题是,如果用户是在Mac OSX与Windows的基础上使用不同的斜杠代码行为不同。 例如:
dir.getPath().lastIndexOf('\\'); //for windows dir.getPath().lastIndexOf('/'); //for mac
有没有一个有点健壮,但简单的方法,我可以在Java代码中检查哪一行是合适的? 我想我可以检查一个,看看它是否返回-1,然后使用其他(如果这样做,那么有一个问题的path),但在这一点上,我超越了解决方法,更多只是好奇如何最好地处理这些问题,因为我可以看到这是一个普遍的事情。 提前致谢!
编辑:这是我目前的解决方法:
int ind = dir.getPath().lastIndexOf('\\') != -1 ? dir.getPath().lastIndexOf('\\') : dir.getPath().lastIndexOf('/');
你可以使用System.getProperty("os.name")
等等,
String osName = System.getProperty("os.name"); if (osName.toLowerCase().contains("mac")) { // It's a mac. } else if (osName.toLowerCase().contains("win")) { // It's windows. } else { // Other. Linux, AIX, etc. }
但你真的应该使用File.separatorChar
这是系统相关的默认名称分隔符字符 。
int ind = dir.getPath().lastIndexOf(File.separatorChar);
而不是尝试检测操作系统,只需使用内置常量的路径字符:
dir.getPath().lastIndexOf(File.separatorChar);
该属性被自动设置为操作系统特定的分隔符。 请参阅File#separatorChar
。
如果您需要一个String
而不是一个char
,请使用File.separator
。
如果您只关心路径分隔符,那么Java 文件类有一个机制来检索依赖于系统的路径分隔符。 所以对于你的情况,你可以做: dir.getPath().lastIndexOf(File.separator);
一般来说,你应该尽可能地使用File.separator
String path = dir.getPath(); int lastIndex = path.lastIndexOf(File.separator);
但是,这并不总是一种选择,在这种情况下,您可以将分隔符转换为已知值…
String path = // Some string you've obtained from some where... path = path.replace("/", File.separator).replace("\\", File.separator);
作为一个indea
建议使用File.separator或System.getProperty(“file.separator”)。 例如:你可以使用dir.getPath().lastIndexOf(File.separatorChar);
或者dir.getPath().lastIndexOf(System.getProperty("file.separator"));
实现平台独立