从完整路径获取不带扩展名的文件名

25

我正在制作一个程序,用于将Excel文件中的数据存储到数据库中。我希望用户在控制台中提供文件的完整路径,然后程序只取文件名继续操作。

加载完整路径的代码如下:

String strfullPath = "";
Scanner scanner = new Scanner(System.in);
System.out.println("Please enter the fullpath of the file");
strfullPath = scanner.nextLine();
String file = strfullPath.substring(strfullPath.lastIndexOf('/') + 1);
System.out.println(file.substring(0, file.indexOf('.')));

之后我想要有:String filename = .......

用户键入的完整路径会像这样:C:\\Users\\myfiles\\Documents\\test9.xls

我创建的文件名只取没有.xls扩展名的名称! 有谁能帮我解决如何做到这一点吗?

如果我想将文件名设为“test9.xls”,应该怎么做? -


更改程序相关内容的语言:将“/”更改为“\”。String file = strfullPath.substring(strfullPath.lastIndexOf('\') + 1); - Vinayak Pahalwan
如果我想将文件名命名为“test9.xls”,我该如何做? - dedmar
5个回答

41

你可以这样做:

String fname = file.getName();
int pos = fname.lastIndexOf(".");
if (pos > 0) {
    fname = fname.substring(0, pos);
}

或者您可以使用apache.commons.io.FilenameUtils

String fileNameWithOutExt = FilenameUtils.removeExtension(fileNameWithExt);

1
+1 鼓励不要重复造轮子。 - Duncan Jones
感谢 FilenameUtils! - Lorenzo Sciuto
1
使用纯Java代码而非第三方库的小片段,值得加一分。 - mahmood

40

我通常使用在其他帖子中描述的解决方案:

import org.apache.commons.io.FilenameUtils;

String basename = FilenameUtils.getBaseName(fileName);

23
你可以使用File类来获取文件名:
File userFile = new File(strfullPath);
String filename = userFile.getName();

使用 File 对象有很多好处,包括能够测试文件是否存在:

if (userFile.isFile()) {
  // Yay, it's a valid file (not a directory and not an invalid path)
}
您还需要在尝试剥离文件之前检查文件是否有扩展名:
if (filename.indexOf(".") > 0) {
    filename = filename.substring(0, filename.lastIndexOf("."));
}

1
if (!filename.equals(""))    
{
        String [] fileparts = filename.split("\\.");
        String filename = fileparts[0]; //Get first part
}

将来回答问题时,请在任何代码示例中提供解释,说明为什么这会起作用。 - Chris Spittles
这种方法没有考虑文件名可能有多个点的情况。例如,vendor.prod.min.js或类似文件名。 - Robert

1
你可以调用file.getName()方法,它会返回文件名字符串。然后你可以去掉扩展名。
String fileName = file.getName();
fileName = fileName.substring(0, fileName.lastIndexOf(".")+1);

4
如果文件没有扩展名,fileName 将变成 "" - Andrew Thompson
考虑到这一点,如果文件名中除了扩展名还有“.”,那么这是唯一不会失败的方法。 - andrebola
应该是fileName.lastIndexOf(".") - 1 而不是 fileName.lastIndexOf(".") + 1。 - Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接