в строке File[] files = dir.listFiles();
files может принять значение null (если доступ к папке запрещен) и далее программа генерирует ошибку, поэтому после указанной строки необходимо, судя по всему, вставить проверку на null: что то вроде этого: if (files == null){
files = new File[]{};
}
Зависит еще от прав. Если с под рута запуск делается по идеи не должно быть ошибок.