我要删除文件的扩展名。例如:
ActualFile = image.png
ExpectedFile = image
哪种方法最有效?
removeExtension()
方法fileName.substring(0, fileName.lastIndexOf('.'))
答案 0 :(得分:4)
没有区别,只有一个。您是否真的要添加整个Apache库以仅使用一种方法?如果您在应用程序中使用Apache-那么也要使用它。如果不是,请创建您的自定义实现-这不是火箭科学。
答案 1 :(得分:2)
从commons-io
看removeExtension
,您会发现substring
也以这种方式在水下使用,就像您描述的那样:
public static String removeExtension(final String fileName) {
if (fileName == null) {
return null;
}
failIfNullBytePresent(fileName);
final int index = indexOfExtension(fileName);
if (index == NOT_FOUND) {
return fileName;
}
return fileName.substring(0, index);
}
由于执行的操作较少,因此您的方法更快,但是removeExtension
方法具有failIfNullBytePresent
,其状态为:
检查输入是否为空字节,表示未经过消毒的数据 传递给文件级功能。
这可能用于毒害字节攻击。
和indexOfExtension
获取具有更多检查的扩展名的索引(如该方法here的javadoc中所见)。
您的方法更快,但是我想说在各种情况下使用commons-io
更为安全/一致,但是使用哪种方法取决于您的情况是否复杂,这是应用程序的关键功能还是仅仅是应用程序的关键功能?自制项目。 removeExtension
不是 复杂或缓慢的功能,您不应该使用它本身。