我有一个问题是获得给定文件名的扩展名。我收到1个文件网址 可能就像
/var/www.dir/file.tar.gz OR /var/www.dir/file.exe
现在我需要从给定的URL拆分文件扩展名(如.tar.gz OR .exe)。 URL由用户动态给出。任何人请帮助我,如何解决这个问题
答案 0 :(得分:7)
这不是一个可怕的复杂任务,而是一个重复出现的任务。看起来像是可以自己快速生产的东西 - 它可以。但您仍然应该使用现成的,经过测试的库:Apache IO Tools,特别是FilenameUtils#getExtension。这样可以避免令人毛骨悚然的错误或不一致。此外,您还可以获得许多其他有用且经过测试的内容。
当然,在双文件扩展名的情况下,您可能需要多次使用这些方法,因为库无法猜测您需要扩展程序的级别。它是一个.gz
文件,只有在解压缩后它才是.tar
文件。
答案 1 :(得分: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
<强> DEMO 强>
答案 2 :(得分:3)
您可以执行以下操作:
String str = "/var/www.dir/file.tar.gz";
Matcher m = Pattern.compile(".*/.*?(\\..*)").matcher(str);
if (m.matches()) {
fileExtension = m.group(1);
}
答案 3 :(得分: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("."));
}
答案 4 :(得分: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" ]
此时,第一件可能是你的名字,其余的部分将是扩展名。然后,您可以加入这些以获得您的扩展类型。
答案 5 :(得分: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);
}
}
答案 6 :(得分: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();
}
答案 7 :(得分:-1)
获取文件输入,然后使用“。”将其拆分。作为分界符可能吗? 设置分隔符:
Scanner line_scanner = new Scanner(line).useDelimiter(".");
读取文件URL两次,一次是文件名,一次是扩展名。