Подтвердить что ты не робот

Как проверить расширение файла в android

В моем приложении, когда мы просматриваем файл с sdcard, файл будет .text,.jpg и mpeg4ie видеофайл. Я хочу сохранить каждый тип файла в определенную папку. Например, файлы .text переходят в текстовую папку. Мой вопрос в том, когда я выбираю файл, как проверить расширение файла?

4b9b3361

Ответ 1

Я бы получил имя файла как String, разделил его на массив с помощью "." как разделитель, а затем получить последний индекс массива, который будет расширением файла. Например:

public class main {
    public static void main(String[] args) {
        String filename = "image.jpg";
        String filenameArray[] = filename.split("\\.");
        String extension = filenameArray[filenameArray.length-1];
        System.out.println(extension);
    }
}

Какие выходы:

jpg

Ответ 2

public static String getFileExt(String fileName) {      
     return fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length());
}

Ответ 3

или вы можете просто сделать

MimeTypeMap.getFileExtensionFromUrl(myfile.toURL().toString() );

Примечание: этот метод не очень надежный, хотя..

Ответ 4

Вы можете использовать FilenameUtils в Apache Commons:

String extension = FilenameUtils.getExtension(mFile.getName());

Ответ 5

Вы также можете сделать что-то вроде ниже и использовать endswith.

public void walkdir(File dir) {
    String txtPattern = ".txt";
    String jpgPattern = ".jpg";
    String mp3Pattern = ".mp3";

    File listFile[] = dir.listFiles();

    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                walkdir(listFile[i]);
            } else {
              if (listFile[i].getName().endsWith(txtPattern)){
                                  //put in txt folder
                              }else if (listFile[i].getName().endsWith(jpgPattern.toLowerCase())){
                                  // put in jpg folder
                              }else if (istFile[i].getName().endsWith(mp3Pattern.toLowerCase())) {
                                  // put in  mp3 folder
              }
            }
        }
    }

}

Извините, не проверили работу, но она должна сделать это за вас.

Ответ 6

У вас не было возможности запустить это (так что может не работать 100%), но это должно быть то, что вы ищете:

File files[] = Environment.getExternalStorageDirectory().listFiles();   
for (File f : files)
 {
  String fullPath = f.getAbsolutePath();
  int dot = fullPath.lastIndexOf(".");
  String ext = fullPath.substring(dot + 1);
  if(ext.equalsIgnoreCase("txt")) // make sure case is irrelevant for your use case; otherwise use ext.equals("txt")
  {
    //do something with f here
  } 
 }  

Ответ 7

Это работает для меня:

public static String getExtension(String fileName) {
    String encoded;
    try { encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); }
    catch(UnsupportedEncodingException e) { encoded = fileName; }
    return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase();
}

Когда файл /mnt/sdcard/boomerang/2013-06-18_12:08:53.txt, возвращается "txt".

Обратите внимание, что вызовы URLEncoder.encode и .repalce должны исправить любые проблемы с безопасностью, которые могут возникнуть при вызове MimeTypeMap.getFileExtensionFromUrl. Например, без вызовов кодирования и замены имена файлов, такие как "Test Image!.jpg", возвращают пустые строки. Также убедитесь, что имя файла находится внизу. Он MimeTypeMap, похоже, не имеет записей для .PNG или .JPG.

Ответ 8

Я нашел хороший пример в docs.oracle.com, как получить расширение файла, которое возвращает расширение типа файла в нижнем регистре или null, если есть ' t расширение файла:

    /*
     * Get the extension of a file.
     */
    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;
    }

Ответ 9

Самый короткий способ узнать расширение файла - использовать lastIndexOf('.'), если имя файла содержит расширение. Проверьте следующий код

String fileName = "test.jpg";
int i = fileName.lastIndexOf('.');
String fileExtension = fileName.substring(i+1);
Log.v("FILE EXTENSION: ",fileExtension);

Ответ 10

Если вы хотите получить все файлы с определенными расширениями в определенном каталоге:

File[] files = (new File("/sdcard/yourDirectory/").listFiles(new CustomFilter());

....


class CustomFilter implements FileFilter
    {
//Add the file extensions you want to look for here:
        private String[]    extension   =
                                        { "text", "jpg", "jpeg", "mpeg" };

        @Override
        public boolean accept(File pathname)
        {
            String name = pathname.getName().toLowerCase();

            for (String anExt : extension)
            {

                if (name.endsWith(anExt))
                {
// A file has been detected with that extension
                    return true;

                }
            }
            return false;
        }

    }

Ответ 11

public String getExtension(File file) {
        String fileName = file.getName();
        try {
            if (fileName.contains("\\.")) {
                String filenameArray[] = fileName.split("\\.");
                extension = filenameArray[filenameArray.length - 1];
            } else {
                extension = "dir";
            }
        } catch (Exception e) {
            extension = "err";
        }
        return extension;
    }

Ответ 12

Вот метод, который проверяет все случаи

    String getExtension(String fileName){
        final String emptyExtension = "";
        if(fileName == null){
            return emptyExtension;
        }
        int index = fileName.lastIndexOf(".");
        if(index == -1){
            return emptyExtension;
        }
        return fileName.substring(index + 1);
    }

Ответ 13

Материал имеет .endsWith( "ваше расширение" )

String whatever = you String;

if(whatever.endsWith("jpg")){
  // your jpg code
}else if(whatever.endsWith("png")){
 // your png code
}