我使用此代码来获取文件夹内文件的绝对路径
public void addFiles(String fileFolder){
ArrayList<String> files = new ArrayList<String>();
fileOp.getFiles(fileFolder, files);
}
但我只想获取文件的文件名(不带扩展名)。我该怎么做?
我认为不存在这样的方法。您可以获取文件名并获取
.
的最后一个索引,并截断之后的内容,并获取 File.separator
的最后一个索引并删除之前的内容。
您已获得文件名。
或者您可以使用
apache commons IO中的
FilenameUtils
并使用以下
FilenameUtils.removeExtension(fileName);
此代码将完成删除文件扩展名和打印名称的工作:
public static void main(String[] args) {
String path = "C:\\Users\\abc\\some";
File folder = new File(path);
File[] files = folder.listFiles();
String fileName;
int lastPeriodPos;
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
fileName = files[i].getName();
lastPeriodPos = fileName.lastIndexOf('.');
if (lastPeriodPos > 0)
fileName = fileName.substring(0, lastPeriodPos);
System.out.println("File name is " + fileName);
}
}
}
如果您对标准库没问题,那么请使用 Apache Common,因为它有现成的方法。
有一个非常好的方法可以做到这一点 - 您可以使用 FilenameUtils.removeExtension。
另请参阅:如何从字符串中修剪文件扩展名
String filePath = "/storage/emulated/0/Android/data/myAppPackageName/files/Pictures/JPEG_20180813_124701_-894962406.jpg"
String nameWithoutExtension = Files.getNameWithoutExtension(filePath);
如果您的项目使用 Spring 您可以使用:
import org.springframework.util.StringUtils;
// …
StringUtils.stripFilenameExtension("/tmp/myFile.txt") // → "/tmp/myFile"
NB:此方法在处理点文件时有其局限性,对于
/tmp/
,它将返回 /tmp/.config
(来自 commons-io 的 getBaseName()
也有同样的问题 顺便说一句)。
这篇 Baeldung 文章提出了这个漂亮的两行(基本上),声称适用于所有情况:
public static String removeFileExtension(String filename, boolean removeAllExtensions) {
if (filename == null || filename.isEmpty()) {
return filename;
}
String extPattern = "(?<!^)[.]" + (removeAllExtensions ? ".*" : "[^.]*$");
return filename.replaceAll(extPattern, "");
}