2014-10-30 14 views
1

我正在运行一些java代码,它查看文件路径并搜索路径中最后一个斜杠的索引。我遇到的问题是,如果用户使用的是基于不同斜杠的Mac OSX和Windows,则代码的行为会有所不同。例如:如果在Mac OSX与Windows中执行特定的java代码行

dir.getPath().lastIndexOf('\\'); //for windows 
dir.getPath().lastIndexOf('/'); //for mac 

有没有一种有点健壮但简单的方法我可以在Java代码中检查哪一行是合适的?我想我可以检查一个,看看它是否返回-1,然后使用另一个(如果那样做,那么这个路径有问题),但在这一点上,我超越了解决方法,更多只是好奇如何最好地处理这些问题,因为我可以看到它是一个普通的事情。提前致谢!

编辑:这是我目前的解决方法:

int ind = dir.getPath().lastIndexOf('\\') != -1 ? dir.getPath().lastIndexOf('\\') : dir.getPath().lastIndexOf('/'); 

回答

2

您可以使用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); 
+0

+1的使用File'的'... – MadProgrammer 2014-10-30 02:29:33

2

,而不是试图检测到操作系统,只需使用内置的常数路径中的字符:

dir.getPath().lastIndexOf(File.separatorChar); 

这个属性被自动设置为特定操作系统的分隔符。见File#separatorChar

如果您需要String而不是char,请改为使用File.separator

2

如果您只关心路径分隔符,那么Java File类具有一种检索系统相关路径分隔符的机制。因此,对于你的情况,你可以这样做: dir.getPath().lastIndexOf(File.separator);

1

一般来说,你应该使用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

1

文件分割符或System.g etProperty(“file.separator”)被推荐。 为如: 可以使用dir.getPath().lastIndexOf(File.separatorChar);
dir.getPath().lastIndexOf(System.getProperty("file.separator"));
实现平台无关性