4

我在获取给定文件名的扩展名时遇到问题。我收到 1 个文件 URL。
它可能像

/var/www.dir/file.tar.gz OR /var/www.dir/file.exe

现在我需要从给定的 URL 中拆分文件扩展名(如 .tar.gz 或 .exe)。URL 由用户动态给出。任何人请帮助我,如何解决这个问题

4

8 回答 8

8

这不是一项可怕的复杂任务,而是反复发生的任务。看起来像是可以自己快速生产的东西——而且确实可以。但是您仍然应该为此使用现成的、经过测试的库:Apache IO Tools,特别是FilenameUtils#getExtension。这样可以避免令人毛骨悚然的错误或不一致。此外,您还会获得许多其他有用的、经过测试的东西。

当然,在双文件扩展名的情况下,您可能需要多次使用这些方法,因为库无法猜测您需要扩展名的级别。它是一个.gz文件,只有在解压缩后它才是一个.tar文件。

于 2012-11-26T12:45:23.720 回答
4

您可以使用lastIndexOf和的组合indexOf

String s = "/var/www.dir/file.tar.gz";
String file = s.substring(s.lastIndexOf("/"));
String extension = file.substring(file.indexOf(".")); // .tar.gz

演示

于 2012-09-19T21:41:52.610 回答
3

您可以执行以下操作:

String str = "/var/www.dir/file.tar.gz";
Matcher m = Pattern.compile(".*/.*?(\\..*)").matcher(str);
if (m.matches()) {
   fileExtension = m.group(1);
}
于 2012-09-19T21:40:02.260 回答
0

您可以使用此代码获取文件扩展名

public static String getFileExtension(String filename)
{
if (filename == null) {
            return null;
}
int lastUnixPos = filename.lastIndexOf('/');
int lastWindowsPos = filename.lastIndexOf('\\');
int indexOfLastSeparator = Math.max(lastUnixPos, lastWindowsPos);
int extensionPos = filename.lastIndexOf('.');
int lastSeparator = indexOfLastSeparator;
int indexOfExtension = lastSeparator > extensionPos ? -1 : extensionPos;
int index = indexOfExtension;
if (index == -1) {
  return "";
} else {
  return filename.substring(index + 1);
}
}
于 2012-12-30T14:47:54.980 回答
0

假设 URL 模式为:"/somurl/blah-blah/filename.extension"。我建议使用以下代码片段来解决您的问题。

String getFileExtension(String url) {
    String[] urlSplit = url.split("/");
    String filename = urlSplit[urlSplit.length - 1];
    String[] nameSplit = filename.split("[.]");
    StringBuffer fileExtension = new StringBuffer();
// to prevent appending . after extension type                                      
    if (nameSplit.length > 1) {
        for (int index = 1; index < nameSplit.length; index++) {
            if (index != nameSplit.length - 1)
                fileExtension.append(nameSplit[index] + ".");
            else
                fileExtension.append(nameSplit[index]);
        }
    } else {
        fileExtension.append(nameSplit[0]);
    }
    return fileExtension.toString();
}
于 2012-12-30T15:44:01.123 回答
0

似乎最简单的解决方案是为异常值(如 .tar.gz)创建单独的案例,并将其余部分视为相同(即,处理最后一个.字符之后的所有内容)。

包含多个字符的扩展.非常罕见,以至于您不需要复杂的方法来解析出您需要的内容。所以:

int length = url.length();
String extension = null;
if(url.substring(length-7).equalsIgnoreCase(".tar.gz")) {
    //special case
} else {
    extension = url.substring(url.lastIndexOf("."));
}
于 2012-09-19T21:36:04.467 回答
0

我刚刚意识到我读错了你的问题。不过,您可以用类似的方法收集扩展名

String yourString = "/your/whole/path.ext.si.ons";
String[] pathPieces = yourString.split("/"); // [ "your", "whole", "path.ext.si.ons" ]

String lastPiece = pathPieces[pathPieces.length - 1];
String[] namePieces = lastPiece.split("."); // [ "path", "ext", "si", "ions" ]

此时,第一部分可能是您的名字,其余部分将是扩展名。然后,您可以加入这些以获得您的扩展类型。

于 2012-09-19T21:42:42.267 回答
-1

获取文件输入,然后使用“。”将其拆分。作为分隔符也许?设置分隔符:

Scanner line_scanner = new Scanner(line).useDelimiter(".");

读取文件 URL 两次,一次用于文件名,一次用于扩展名。

于 2012-09-19T21:36:48.470 回答