一、File類獲取文件後綴名
在Java中,最常見的獲取文件後綴名的方法是使用File類提供的方法,具體步驟如下:
File file = new File("C:/test/file.txt");
String fileName = file.getName();
int dotIndex = fileName.lastIndexOf(".");
String suffix = fileName.substring(dotIndex);
System.out.println("文件後綴名為:"+suffix);
以上代碼首先創建一個File對象,然後使用getName()方法獲取文件名稱,接着使用lastIndexOf()方法獲取最後一個”.”出現的位置,再使用substring()方法獲取文件後綴名並打印出來。
但是需要注意的是,如果文件沒有後綴名或者在文件名中有多個”.”,這種方法獲取的結果可能不是我們想要的。因此,我們可以對代碼進行改進:
String suffix = "";
if(dotIndex > 0){
suffix = fileName.substring(dotIndex + 1);
}
這裡通過判斷dotIndex大於0,即文件名中存在”.”,來防止在文件名最前方出現”.”的情況。如果為true,就用substring()方法獲取文件後綴名。
二、FilenameUtils類獲取文件後綴名
除了使用File類,還可以使用Apache Commons IO庫中的FilenameUtils類提供的方法來獲取文件後綴名。具體實現如下:
String suffix = FilenameUtils.getExtension("C:/test/file.txt");
System.out.println("文件後綴名為:"+suffix);
這裡直接調用FilenameUtils.getExtension()方法獲取文件後綴名,並打印出來。
此方法可以處理文件沒有後綴名的情況,返回的結果為一個空字符串。
三、Path類獲取文件後綴名
在Java 7中,引入了Path類來簡化對文件和目錄的操作。Path類的getParent()和getFileName()方法可以分別獲取父路徑和文件名,並支持獲取文件名的後綴名。具體實現如下:
Path path = Paths.get("C:/test/file.txt");
String fileName = path.getFileName().toString();
String suffix = FilenameUtils.getExtension(fileName);
System.out.println("文件後綴名為:"+suffix);
首先通過Paths.get()方法獲取路徑,接着使用getFileName()方法獲取文件名,再使用FilenameUtils.getExtension()方法獲取文件後綴名,並打印出來。
這裡的getFileName()方法返回的是Path對象類型,因此需要使用toString()方法轉換為字符串類型以供後續的方法調用。
四、InputStream獲取文件後綴名
在Java中,InputStream可以讀取文件內容,同時也可以獲取文件的後綴名。具體步驟如下:
File file = new File("C:/test/file.txt");
InputStream inputStream = new FileInputStream(file);
String suffix = "";
if(inputStream.markSupported()){
inputStream.mark(Integer.MAX_VALUE);
byte[] bytes = new byte[10];
int read = inputStream.read(bytes);
if(read > 0){
suffix = getSuffix(new String(bytes));
}
inputStream.reset();
}
inputStream.close();
System.out.println("文件後綴名為:"+suffix);
// 獲取文件後綴名的方法
public static String getSuffix(String fileHeader){
if(fileHeader.startsWith("BM")){
return ".bmp";
}else if(fileHeader.startsWith("47 49 46")){
return ".gif";
}else if(fileHeader.startsWith("FF D8 FF")){
return ".jpg";
}else if(fileHeader.startsWith("89 50 4E 47 0D 0A 1A 0A")){
return ".png";
}else{
return "";
}
}
代碼中首先使用FileInputStream類創建輸入流對象,再用markSupported()方法判斷是否支持mark()和reset()方法,如果支持就使用mark()方法標記一下,以後可以使用reset()回到標記的位置繼續讀取;讀取前十個位元組,將其轉化為字符串,然後根據其頭部信息判斷文件類型並返回對應的後綴名。
值得注意的是,該方法並不能處理所有類型的文件,需要根據所需調整代碼中的判斷條件。
五、通過正則表達式獲取文件後綴名
在Java中,也可以使用正則表達式來獲取文件後綴名。具體實現如下:
String fileName = "file.txt";
Pattern r = Pattern.compile("\\.(\\w+)$");
Matcher m = r.matcher(fileName);
if(m.find()){
String suffix = m.group(1);
System.out.println("文件後綴名為:"+suffix);
}
這裡首先定義一個正則表達式,使用compile()方法編譯,其中\\w+表示一個或多個字母、數字或下劃線,$表示在文件名末尾;然後使用matcher()方法創建匹配器對象m,傳入文件名fileName作為參數;最後使用find()方法進行匹配,如果匹配到了就使用group()方法獲取匹配到的第一個括號內的內容,即文件後綴名,並打印出來。
雖然使用正則表達式可以方便地處理一些複雜的文件名,但是在性能方面可能存在一些問題。
六、總結
本文從Java獲取文件後綴名的多個方面進行了詳細的闡述。其中包括使用File類、FilenameUtils類、Path類、InputStream、正則表達式等不同的方式。開發者可以根據自己的需求選擇合適的方法來獲取文件後綴名。
原創文章,作者:URIA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/136574.html