public class MainActivity extends ListActivity {
private List<String> mPathList = null;
private String root = "/"; // символ для корневого элемента
private TextView mPathTextView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPathTextView = (TextView) findViewById(R.id.textViewPath); // здесь будем выводить текущее местоположение
getDir(root); // выводим список файлов и папок в корневой папке системы
}
private void getDir(String dirPath) {
mPathTextView.setText("Путь: " + dirPath); // где мы сейчас
List<String> itemList = new ArrayList<>();
mPathList = new ArrayList<>();
File file = new File(dirPath);
File[] filesArray = file.listFiles(); // получаем список файлов
// если мы не в корневой папке
if (!dirPath.equals(root)) {
itemList.add(root);
mPathList.add(root);
itemList.add("../");
mPathList.add(file.getParent());
}
// формируем список папок и файлов для передачи адаптеру
for (File aFilesArray : filesArray) {
file = aFilesArray;
mPathList.add(file.getPath());
if (file.isDirectory()) // Это папка
itemList.add(file.getName() + "/");
else
itemList.add(file.getName());
}
// Можно выводить на экран список
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
R.layout.list_item, itemList);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// обработка нажатий на элементах списка
File file = new File(mPathList.get(position));
// если это папка
if (file.isDirectory()) {
if (file.canRead()) // если она доступна для просмотра, то заходим в неё
getDir(mPathList.get(position));
else { // если папка закрыта, то сообщаем об этом
new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle(
"[" + file.getName()
+ "] папка не доступна!")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).show();
}
} else { // если элемент списка является файлом, то выводим его имя
String fileInfo = "Абсолютный путь: " + file.getAbsolutePath()
+ "\n" + "Путь: " + file.getPath() + "\n" + "Родитель: "
+ file.getParent() + "\n" + "Имя: " + file.getName() + "\n"
+ "Последнее изменение: " + new Date(file.lastModified());
new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle("[" + file.getName() + "]")
.setMessage(fileInfo)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).show();
}
}
}
В onCreate
методе getDir(root);
и private void getDir
в строке for (File aFilesArray : filesArray)
возникает ошибка
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at com.example.rhinocerology.filesmanager.MainActivity.getDir(MainActivity.java:50)at
com.example.rhinocerology.filesmanager.MainActivity.onCreate(MainActivity.java:31)
Ну скорее всего File[] filesArray = file.listFiles();
возвращает null и скорее всего потому, что не верный путь (нет разрешения на доступ к файловой системе, например).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно написать мобильное приложение на android, но основная часть кода (так сказать, ядро) должна быть написана на СиМожно ли как-то объединить...
Есть небольшое оконное приложение на SwingНа форме JFrame form расположены текстовые поля и объект jSpinner spinner