Я пытаюсь сделать свой файловый менеджер и столкнулся с такой проблемой. Когда я пытаюсь выбрать файл, а не директорию, то моя программа слетает. Можете подсказать, как сделать так, что бы программа допускала открытие только директорий. Если конкретно, то мне нужно узнать есть ли какие-то алгоритмы или методы для определения расширения файлов.
/*Класс который отвечает за работу файлового менеджера*/
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();//Парсинг директории и занесение всех ее элементов в массив
}
}
Проще всего искать до последней точки и обрезать все до нее.
Для этого существует функция lastIndexOf.
Функция обрезающая расширение:
private static String getFileExtension(String mystr) {
int index = mystr.indexOf('.');
return index == -1? null : mystr.substring(index);
}
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);
Path path = Paths.get("foo/bar.java")
if (path.endsWith(".java")){
//Do stuff
}
Мне необходимо закрасить фон выделенного пункта JMenuПробовал напрямую обратится к объекту и использовать setBackground()- тщетно
Всем приветСкажите пожалуйста, какую замену можно придумать оконному DLL на Linux + java
Нужно программно разархивировать zip файлЗнаю про либу zip4j, но как я понял, получать прогресс из этой задачи не получится