当前位置: 首页 > 面试题库 >

删除Java中的文件扩展名

茅和玉
2023-03-14
问题内容

(不包括任何外部库。)

在不假定任何文件名的情况下,删除Java中文件名扩展名的最有效方法是什么?

一些例子和预期结果:

  • 文件夹>文件夹
  • hello.txt>你好
  • read.me>阅读
  • hello.bkp.txt> hello.bkp
  • 怪异..名称>怪异。
  • .hidden> .hidden

(或者应该只 隐藏 最后一个?)

编辑 :原始问题假定输入是文件名(而不是文件路径)。由于一些答案是关于文件路径的,因此此类功能在以下情况下也应起作用:

  • 罕见的文件夹/你好>罕见的文件夹/你好

Sylvain M的回答很好地处理了这种特殊情况。


问题答案:

我将为此目的使用双参数版本的stab,lastIndexOf以删除一些特殊情况的检查代码,并希望使意图更具可读性。幸得贾斯汀“jinguy”尼尔森提供这种方法的基础:

public static String removeExtention(String filePath) {
    // These first few lines the same as Justin's
    File f = new File(filePath);

    // if it's a directory, don't remove the extention
    if (f.isDirectory()) return filePath;

    String name = f.getName();

    // Now we know it's a file - don't need to do any special hidden
    // checking or contains() checking because of:
    final int lastPeriodPos = name.lastIndexOf('.');
    if (lastPeriodPos <= 0)
    {
        // No period after first character - return name as it was passed in
        return filePath;
    }
    else
    {
        // Remove the last period and everything after it
        File renamed = new File(f.getParent(), name.substring(0, lastPeriodPos));
        return renamed.getPath();
    }
}

对我来说,这比特殊格式的隐藏文件和不包含点的文件更清晰。它也使我更清楚地了解您的规格要求;类似于“删除最后一个点及其后的所有内容,并假设该点存在并且不是文件名的第一个字符”。

请注意,此示例还隐含了字符串作为输入和输出。由于大多数抽象都需要File对象,因此如果这些对象也同时是输入和输出,则会稍微清楚一点。



 类似资料:
  • 问题内容: 给定一个文件名,例如: 我想删除扩展名(如果存在)。我怎样用Java做这个?谢谢! 问题答案: 就像是 索引检查可避免将“ ” 等隐藏文件转换为“”,并避免使用诸如的名称。

  • 问题内容: 我有许多扩展名为.txt的文件。如何删除Linux中多个文件的.txt扩展名? 我找到 替代扩展 我也想对子文件夹中的文件执行此操作。 问题答案: 有点危险,因为根据其手册页: 重命名将通过替换第 一次 出现的… 来重命名指定的文件。 像这样的文件名会很乐意做错事。 这是使用和的解决方案: 请记住,如果文件名包含换行符(罕见,但并非不可能),这将中断。 如果您有GNU查找,这是一个更可

  • [更新] 我正在实现APK扩展文件支持(但没有XAPK ZIP库支持)。 文档表明,如果所需的APK扩展文件丢失(例如从obb文件夹中删除),我的应用程序将重新下载该文件。这种事不会发生在我身上;我的应用一直说不需要下载。似乎Google Play Downloader库从其SQLite数据库下载的信息为空。请注意,我还没有在Google Play上更新APK草案和扩展文件——它们仍然是第一个版本

  • 我一直在尝试让nginx在没有. php或. html扩展的情况下工作,我需要一点帮助。提前感谢您的时间! 我尝试了在如何使用NGINX从url中删除. php和. html扩展中找到的解决方案?但是没有效果 这是我当前的nginx配置。这是几个教程的组合,但它是有效的。

  • 问题内容: 假设我有一个删除扩展名的方法,我需要两个变量的结果,一个是域名,另一个是扩展名。 我尝试过但不起作用,我猜只能用正则表达式.... 问题答案: 这将产生以下数组

  • 问题内容: 我必须将数据从Excel文件导入数据库,并执行此操作,我想检查所选文件的扩展名。 这是我的代码: 但是我总是得到: 选择一个Excel文件! 我找不到我的代码有什么问题,请有人帮忙。 问题答案: 以下 应该 要么