Java fayl uzantısı faylını necə əldə etmək olar?

Aydın olmaq üçün bir MIME növü axtarır deyiləm.

Gəlin aşağıdakı girişə sahib olaq: /path/to/file/foo.txt

Xüsusilə, bu daxilolmanın uzadılması üçün .txt daxil olmaq üçün bir yola ehtiyac duyuram. Java'da bunu etmək üçün daxili bir yol varmı? Öz analizi yazmıram.

389
26 авг. uzunluğu 26 hektar . 2010-08-26 03:19 '10 at 3:19 2010-08-26 03:19
ответ 31 cavab
  • 1
  • 2

Bu halda Apache Commons IO'dan FilenameUtils.getExtension istifadə edin

Burada istifadə necə bir nümunədir (tam yol və ya yalnız fayl adını göstərə bilərsiniz):

 String ext1 = FilenameUtils.getExtension("/path/to/file/foo.txt"); // returns "txt" String ext2 = FilenameUtils.getExtension("bar.exe"); // returns "exe" 
548
25 апр. Apr 25-də Juan Rojas tərəfindən verilmiş cavab 2013-04-25 00:12 '13 'da 0:12' da 2013-04-25 00:12

Bunun üçün həqiqətən "parser" lazımdır?

 String extension = ""; int i = fileName.lastIndexOf('.'); if (i > 0) { extension = fileName.substring(i+1); } 

Windows arxasında sadə fayl adları ilə məşğul olduğunuzu düşünürsünüzsə, archive.tar.gz .

border=0

Btw, /path/to.a/file ola biləcəyi halda ".", Amma fayl adı özü əhəmiyyətli deyil (məsələn, /path/to.a/file ), edə bilərsiniz

 String extension = ""; int i = fileName.lastIndexOf('.'); int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\')); if (i > p) { extension = fileName.substring(i+1); } 
263
26 авг. Cavab EboMike 26 aug tərəfindən verilir . 2010-08-26 03:24 '10 at 3:24 2010-08-26 03:24
 private String getFileExtension(File file) { String name = file.getName(); int lastIndexOf = name.lastIndexOf("."); if (lastIndexOf == -1) { return ""; // empty extension } return name.substring(lastIndexOf); } 
84
23 февр. Cavab 23 fevralda spektri ilə verilir 2014-02-23 23:25 '14 da 23:25 2014-02-23 23:25

Guava kitabxanasını istifadə edirsinizsə, Files kommunal sinifinə müraciət edə bilərsiniz. getFileExtension() xüsusi bir üsula sahibdir. Məsələn:

 String path = "c:/path/to/file/foo.txt"; String ext = Files.getFileExtension(path); System.out.println(ext); //prints txt 

Bundan əlavə, eyni funksiyanı olan bir fayl adını əldə edə bilərsiniz, getNameWithoutExtension () :

 String filename = Files.getNameWithoutExtension(path); System.out.println(filename); //prints foo 
77
13 апр. JeanValjean tərəfindən verilən cavabı Apr 13 2013-04-13 10:41 '13 saat 10:41 'da 2013-04-13 10:41

Əgər Android-də bu istifadə edə bilərsiniz:

 String ext = android.webkit.MimeTypeMap.getFileExtensionFromUrl(file.getName()); 
28
26 марта '15 в 8:15 2015-03-26 08:15 Cavab intrepidis tərəfindən 26 mart 'da 15:15' də veriləcək

Noktadan əvvəl simvol olmadan faylların adlarını nəzərə almaq üçün, bu kiçik dəyişiklikdən qəbul olunmuş cavabda istifadə etməlisiniz:

 String extension = ""; int i = fileName.lastIndexOf('.'); if (i >= 0) { extension = fileName.substring(i+1); } 

 "file.doc" => "doc" "file.doc.gz" => "gz" ".doc" => "doc" 
15
11 сент. Sep 11-də Sylvain Leroux tərəfindən verilmiş cavab 2013-09-11 16:07 '13 'da 16:07' da 2013-09-11 16:07

Mənim çirkli və String.replace istifadə edə bilərsiniz ən kiçik :

 .replaceAll("^.*\\.(.*)$", "$1") 

Qeyd edək ki, ilk * açgözlüdir, buna görə mümkün qədər çox simvol tutacaq və sonra son nöqtə və fayl uzantısı qalacaq.

10
14 марта '14 в 2:59 2014-03-14 02:59 Cavab Ebrahim Byagowi tərəfindən 14 Mart '14 'də 2:59 2014-03-14 02:59 ' də verilir

Bu sübut edilmiş bir üsuldur.

 public static String getExtension(String fileName) { char ch; int len; if(fileName==null || (len = fileName.length())==0 || (ch = fileName.charAt(len-1))=='/' || ch=='\\' || //in the case of a directory ch=='.' ) //in the case of . or .. return ""; int dotInd = fileName.lastIndexOf('.'), sepInd = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\')); if( dotInd<=sepInd ) return ""; else return fileName.substring(dotInd+1).toLowerCase(); } 

Bir test nümunəsi:

 @Test public void testGetExtension() { assertEquals("", getExtension("C")); assertEquals("ext", getExtension("C.ext")); assertEquals("ext", getExtension("A/B/C.ext")); assertEquals("", getExtension("A/B/C.ext/")); assertEquals("", getExtension("A/B/C.ext/..")); assertEquals("bin", getExtension("A/B/C.bin")); assertEquals("hidden", getExtension(".hidden")); assertEquals("dsstore", getExtension("/user/home/.dsstore")); assertEquals("", getExtension(".strange.")); assertEquals("3", getExtension("1.2.3")); assertEquals("exe", getExtension("C:\\Program Files (x86)\\java\\bin\\javaw.exe")); } 
9
29 марта '16 в 14:37 2016-03-29 14:37 Cavab yavuzkavus 29 mart '14 saat 14:37 'də verilir 2016-03-29 14:37

Bütün digər cavablardan da göründüyü kimi, heç bir adekvat "quraşdırılmış" funksiya yoxdur. Bu təhlükəsiz və sadə bir üsuldur.

 String getFileExtension(File file) { if (file == null) { return ""; } String name = file.getName(); int i = name.lastIndexOf('.'); String ext = i > 0 ? name.substring(i + 1) : ""; return ext; } 
7
15 февр. Cavab 15 fevralda verilir . 2018-02-15 05:08 '18 saat 05:08 'da 2018-02-15 05:08

Haqqında (Java 1.5 RegEx istifadə edərək):

  String[] split = fullFileName.split("\\."); String ext = split[split.length - 1]; 
6
10 апр. Ninju Bohra tərəfindən verilmiş cavab 10 aprel 2013-04-10 21:21 '13 at 21:21 2013-04-10 21:21

Apache commons-io istifadə planlaşdırır və yalnız fayl uzantısını yoxlamaq və sonra bəzi əməliyyat həyata keçirmək istəyirsinizsə, bu istifadə edə bilərsiniz, burada bir snippet

 if(FilenameUtils.isExtension(file.getName(),"java")) { someoperation(); } 
6
10 июня '14 в 13:41 2014-06-10 13:41 cavab 10 iyun 'da 13:41' də Geng Jiawen tərəfindən verilmişdir 2014-06-10 13:41

Doğru olaraq .tar.gz işləyən bir metod, hətta .tar.gz adlarında nöqtələrlə birlikdə:

 private static final String getExtension(final String filename) { if (filename == null) return null; final String afterLastSlash = filename.substring(filename.lastIndexOf('/') + 1); final int afterLastBackslash = afterLastSlash.lastIndexOf('\\') + 1; final int dotIndex = afterLastSlash.indexOf('.', afterLastBackslash); return (dotIndex == -1) ? "" : afterLastSlash.substring(dotIndex + 1); } 

afterLastSlash afterLastBackslash axtarışını daha sürətli etmək üçün afterLastBackslash , çünki bir afterLastBackslash varsa, bütün simli axtarış etməyəcəkdir.

char[] Orijinal String içərisində yenidən istifadə olunur, heç bir zibil əlavə etmir və JVM ehtimal edər ki, afterLastSlash dərhal yığın yerinə yığışdırmaq üçün dərhal zibil olur .

4
14 апр. Cavab Olathe tərəfindən 14 Apreldə verilir 2013-04-14 15:07 '13 at 15:07 2013-04-14 15:07

JFileChooser haqqında nə deyirsiniz? Son nəticəni təhlil etmək lazım olduğu kimi asan deyil ...

 JFileChooser filechooser = new JFileChooser(); File file = new File("your.txt"); System.out.println("the extension type:"+filechooser.getTypeDescription(file)); 

MIME növü olan ...

OK ... MIME tipini bilmək istəmədiyini unutdum.

Aşağıdakı linkdə maraqlı bir kod: http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html

  public static String getExtension(File f) { String ext = null; String s = f.getName(); int i = s.lastIndexOf('.'); if (i > 0  i < s.length() - 1) { ext = s.substring(i+1).toLowerCase(); } return ext; } 

İlgili sual: Java faylında fayl uzantısını necə düzəltmək olar?

4
26 авг. Cavab verilir . 2010-08-26 03:57 '10 at 3:57 2010-08-26 03:57

REGEX versiyası haqqında:

 static final Pattern PATTERN = Pattern.compile("(.*)\\.(.*)"); Matcher m = PATTERN.matcher(path); if (m.find()) { System.out.println("File path/name: " + m.group(1)); System.out.println("Extention: " + m.group(2)); } 

və ya sıfır genişləndirilməsi üçün dəstək:

 static final Pattern PATTERN = Pattern.compile("((.*\\" + File.separator + ")?(.*)(\\.(.*)))|(.*\\" + File.separator + ")?(.*)"); class Separated { String path, name, ext; } Separated parsePath(String path) { Separated res = new Separated(); Matcher m = PATTERN.matcher(path); if (m.find()) { if (m.group(1) != null) { res.path = m.group(2); res.name = m.group(3); res.ext = m.group(5); } else { res.path = m.group(6); res.name = m.group(7); } } return res; } Separated sp = parsePath("/root/docs/readme.txt"); System.out.println("path: " + sp.path); System.out.println("name: " + sp.name); System.out.println("Extention: " + sp.ext); 

* nix üçün nəticə:
yol: / root / docs /
adı: readme
Daxil: txt

windows üçün, parsePath ("c: \ windows \ readme.txt"):
yol: c: \ windows \
adı: readme
Daxil: txt

2
30 янв. Dmitri Sokolyukun cavabı 30 yanvar 2017-01-30 12:10 '17 saat 12:10 'də 2017-01-30 12:10

Burada isteğe bağlı bir dönüş dəyəri olan bir versiya (faylın bir uzantısı olduğundan əmin olmağınızdan ötəri) ... bu da operativliyi yoxlayır ...

 import java.io.File; import java.util.Optional; public class GetFileExtensionTool { public static Optional<String> getFileExtension(File file) { if (file == null) { throw new NullPointerException("file argument was null"); } if (!file.isFile()) { throw new IllegalArgumentException("getFileExtension(File file)" + " called on File object that wasn't an actual file" + " (perhaps a directory or device?). file had path: " + file.getAbsolutePath()); } String fileName = file.getName(); int i = fileName.lastIndexOf('.'); if (i > 0) { return Optional.of(fileName.substring(i + 1)); } else { return Optional.empty(); } } } 
2
17 февр. Cavab verildi schuttek 17 fevral. 2017-02-17 23:56 '17 də 11:56 2017-02-17 23:56
 path = "/Users/test/test.txt" extension = path.substring(path.lastIndexOf("."), path.length()); 

".txt"

yalnız "txt" istəyirsinizsə, path.lastIndexOf(".") + 1

1
24 авг. Clément Chameyrat 24 aug tərəfindən verilmiş cavab 2017-08-24 18:57 '17 də 18:57 2017-08-24 18:57

Burada kiçik bir üsul qurdum (lakin qorunan bir çox deyil və bir çox səhvləri yox etmir), ancaq ümumi bir java proqramı proqramı halında bu faylı tapmaq üçün kifayətdir. Bu kompleks fayl növləri üçün işləmir, lakin onlar adətən istifadə edilmir.

  public static String getFileType(String path){ String fileType = null; fileType = path.substring(path.indexOf('.',path.lastIndexOf('/'))+1).toUpperCase(); return fileType; } 
1
16 июня '15 в 0:53 2015-06-16 00:53 Cavab Rivalion tərəfindən 16 İyun '15 'də 0:53 2015-06-16 00:53' də verilir
 // Modified from EboMike answer String extension = "/path/to/file/foo.txt".substring("/path/to/file/foo.txt".lastIndexOf('.')); 
Genişlənmə

başlanğıcda ".txt" olmalıdır.

1
26 авг. cavab 26 avqust uzunluğunda verilir . 2010-08-26 03:42 '10 at 3:42 2010-08-26 03:42
 String extension = com.google.common.io.Files.getFileExtension("fileName.jpg"); 
1
24 мая '15 в 17:59 2015-05-24 17:59 Cavab Alfaville tərəfindən 24 May 'da 17:59' də verilir 2015-05-24 17:59

Hər hansı bir kitabxanadan istifadə etmədən, String üsulunu aşağıdakı kimi istifadə edə bilərsiniz:

  String[] splits = fileNames.get(i).split("\\."); String extension = ""; if(splits.length >= 2) { extension = splits[splits.length-1]; } 
1
23 июня '17 в 4:33 2017-06-23 04:33 Cavab Farah tərəfindən 23 İyun, '17 'də 4:33 2017-06-23 04:33' də verilir

Fayl adından fayl uzantısını alın

  private static final char EXTENSION_SEPARATOR = '.';  private static final char UNIX_SEPARATOR = '/';  private static final char WINDOWS_SEPARATOR = '\\';  private static final char SYSTEM_SEPARATOR = File.separatorChar;  public static String getExtension(String filename) { if (filename == null) { return null; } int index = indexOfExtension(filename); if (index == -1) { return ""; } else { return filename.substring(index + 1); } }  public static int indexOfExtension(String filename) { if (filename == null) { return -1; } int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR); int lastSeparator = indexOfLastSeparator(filename); return (lastSeparator > extensionPos ? -1 : extensionPos); }  public static int indexOfLastSeparator(String filename) { if (filename == null) { return -1; } int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR); int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR); return Math.max(lastUnixPos, lastWindowsPos); } 

Kreditlər

18 нояб. Cavab 18 noyabrda Vasanth tərəfindən verilir. 2016-11-18 11:36 '16 saat 11:36 'də 2016-11-18 11:36

Mən hayaletin cavabının sadəliyini sevirəm və onun şərhlərindən birində EboMike tərəfindən soruşulan başqa bir sual üçün fayl yollarında nöqtələri düzəltdirən başqa bir cavab var.

Hər hansı bir üçüncü tərəf API tətbiq etmədən, mən təklif edirəm:

 private String getFileExtension(File file) { String name = file.getName().substring(Math.max(file.getName().lastIndexOf('/'), file.getName().lastIndexOf('\\')) < 0 ? 0 : Math.max(file.getName().lastIndexOf('/'), file.getName().lastIndexOf('\\'))); int lastIndexOf = name.lastIndexOf("."); if (lastIndexOf == -1) { return ""; // empty extension } return name.substring(lastIndexOf + 1); // doesn't return "." with extension } 

Bu kimi bir şey, məsələn, fayl formatının köçürülməsi üçün lazım olan hər hansı bir ImageIO metodunda faydalı ola bilər.

Niyə DIY edə bilərsiniz?

0
16 дек. Cavab DDPWNAGE 16 dekabr verilir. 2018-12-16 05:03 '18 də 5:03 'də 2018-12-16 05:03' də

Java 8 üçün başqa liner.

 Arrays.stream(fileName.split("\\.")).reduce((a,b) -> b).orElse(null) 

Aşağıdakı kimi işləyir:

  1. "." İstifadə edərək dizgələr bir dizəyə bir split.
  2. Diziyi axına çevirmək
  3. Akışın son elementini, yəni fayl uzantısını almaq üçün Azaltın.
0
29 янв. Cavab Jens.Huehn_at_SlideFab.com tərəfindən verilir Jan 29 2019-01-29 00:34 '19 'da 0:34, 2019-01-29 00:34' da

Yuxarıdakı bütün cavabları qarışdırmaqla bir uzantı tapmaq üçün ən yaxşı yolu tapdım.

 public static String getFileExtension(String fileLink) { String extension; Uri uri = Uri.parse(fileLink); String scheme = uri.getScheme(); if (scheme != null  scheme.equals(ContentResolver.SCHEME_CONTENT)) { MimeTypeMap mime = MimeTypeMap.getSingleton(); extension = mime.getExtensionFromMimeType(CoreApp.getInstance().getContentResolver().getType(uri)); } else { extension = MimeTypeMap.getFileExtensionFromUrl(fileLink); } return extension; } public static String getMimeType(String fileLink) { String type = CoreApp.getInstance().getContentResolver().getType(Uri.parse(fileLink)); if (!TextUtils.isEmpty(type)) return type; MimeTypeMap mime = MimeTypeMap.getSingleton(); return mime.getMimeTypeFromExtension(FileChooserUtil.getFileExtension(fileLink)); } 
0
15 янв. 15 yanvar tarixində Raghav Satyadev tərəfindən verilmiş cavab 2018-01-15 09:08 '18 saat 09:08 'da 2018-01-15 09:08

Normal ifadələrə əsaslanan bir alternativ. Çox sürətli deyil, yaxşı deyil.

 Pattern pattern = Pattern.compile("\\.([^.]*)$"); Matcher matcher = pattern.matcher(fileName); if (matcher.find()) { String ext = matcher.group(1); } 
0
13 мая '13 в 15:38 2013-05-13 15:38 Cavab verilir serhiy.h 13 May 13:38 ' də 2013-05-13 15:38

Bu xüsusi sual mənə bir çox problemlər verir, buna görə buradakı bu problem üçün çox sadə bir həll tapdım.

 file.getName().toLowerCase().endsWith(".txt"); 

Nədir?

0
24 апр. Cavab vikram Bhardwaj tərəfindən verilir 24 Apr 2016-04-24 11:11 '16 11:11 2016-04-24 11:11

cəhd edin.

 String[] extension = "adadad.adad.adnandad.jpg".split("\\.(?=[^\\.]+$)"); // ['adadad.adad.adnandad','jpg'] extension[1] // jpg 
-1
08 нояб. Cavab Adnane 08 noyabrda verilir. 2017-11-08 13:41 '17 at 13:41 'də 2017-11-08 13:41
  @Test public void getFileExtension(String fileName){ String extension = null; List<String> list = new ArrayList<>(); do{ extension = FilenameUtils.getExtension(fileName); if(extension==null){ break; } if(!extension.isEmpty()){ list.add("."+extension); } fileName = FilenameUtils.getBaseName(fileName); }while (!extension.isEmpty()); Collections.reverse(list); System.out.println(list.toString()); } 
-1
11 янв. Cavab 11 yanvarda Ashish Pancholi tərəfindən verilir . 2018-01-11 12:42 '18 at 12:42 pm 2018-01-11 12:42

Java7 funksiyasını java.io paketindən istifadə edə bilərsiniz.

 Files.probeContentType(path); 

Aşağıdakı kod snippetinə baxın.

 public static String returnContentType(String pathText) throws Exception { // obtain Path object that represents the file Path path = Paths.get(pathText); // probe the content String contentType = Files.probeContentType(path); // return content type return contentType; } 
-1
14 окт. Tushar Sagar tərəfindən 14 oktyabrda cavab verildi . 2015-10-14 16:47 '15 'də 16:47' də 2015-10-14 16:47

Java ilə məşğul olmaq üçün quraşdırılmış bir şəkildə var, sizin üçün lazım olan java.nio.file.Files sinifində :

 File f = new File("/path/to/file/foo.txt"); String ext = Files.probeContentType(f.toPath()); if(ext.equalsIgnoreCase("txt")) do whatever; 

Qeyd edək ki, bu statik metod burada dəyişə biləcək "məzmun tipi" almaq üçün burada olan spesifikasiyalardan istifadə edir.

-4
25 сент. Nick Giampietro tərəfindən verilmiş cavab Sep 25 2013-09-25 23:47 '13 'da 23:47' də 2013-09-25 23:47
  • 1
  • 2

tags ilə bağlı digər suallar və ya bir sual