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

311
12 января 2017, 04:39

Я пытаюсь сделать свой файловый менеджер и столкнулся с такой проблемой. Когда я пытаюсь выбрать файл, а не директорию, то моя программа слетает. Можете подсказать, как сделать так, что бы программа допускала открытие только директорий. Если конкретно, то мне нужно узнать есть ли какие-то алгоритмы или методы для определения расширения файлов.

/*Класс который отвечает за работу файлового менеджера*/
public class FileManager extends AppCompatActivity implements AdapterView.OnItemClickListener {
    ListView listOfDirs;
    String [] paths = {"/storage/emulated/0/", "/storage/extSdCard/"};
    String currentPath = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file_manager);
        listOfDirs = (ListView) findViewById(R.id.list);
        listOfDirs.setOnItemClickListener(this);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
                paths);
        listOfDirs.setAdapter(adapter);
    }

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
        String localPath = paths[position];/*Здесь я определяю какую диру выбрал юзер и осуществляю переход в эту диру*/ 
        transition(localPath);//Сам переход
        listOfDirs.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,
                paths)); /*Вывод на экран директорий, находящихся по заданному пути*/
    }

    void transition(String currentDirectory){
        if(currentPath.equals("")){ //Проверяет установлен ли первичный путь
            currentPath = currentDirectory;
        }
        else {
            currentPath = currentPath + currentDirectory;
        }
        File file = new File(currentPath);
        paths = file.list();//Парсинг директории и занесение всех ее элементов в массив
    }
}
Answer 1

Проще всего искать до последней точки и обрезать все до нее.

Для этого существует функция lastIndexOf.

Функция обрезающая расширение:

private static String getFileExtension(String mystr) {
    int index = mystr.indexOf('.');
    return index == -1? null : mystr.substring(index);
}
Answer 2
String path = "file.txt";
Pattern p = Pattern.compile("\\.\\w+$");
Matcher m = p.matcher(path);
m.find();
String ext = m.group();
System.out.println(path + " " + ext);
Answer 3
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
    //Do stuff
}
READ ALSO
Динамический массив (Java)

Динамический массив (Java)

Задача : Массив состоит из натуральных чисел

511
Почему не закрашивается фон JMenu? Java

Почему не закрашивается фон JMenu? Java

Мне необходимо закрасить фон выделенного пункта JMenuПробовал напрямую обратится к объекту и использовать setBackground()- тщетно

288
Замена Dll в Linux + java

Замена Dll в Linux + java

Всем приветСкажите пожалуйста, какую замену можно придумать оконному DLL на Linux + java

302
Разархивирование zip файла в android

Разархивирование zip файла в android

Нужно программно разархивировать zip файлЗнаю про либу zip4j, но как я понял, получать прогресс из этой задачи не получится

374