Не находит файлы и каталоги Java.io.file

385
31 мая 2017, 04:03

По разному пишут, где то путь например File file = new File("C://wall.png"); А где то File file = new File("C:\\wall.png"); Есть места где пишут и через одинарный слэш. Я в итоге получаю NPE. Пробовал по всякому, но чтобы продолжить дальше искать в чем проблема, надо наверняка узнать какой слэш использовать или нет разницы ?

Например в папке scr лежит wall.png объявляю public File file; инициализирую file = new File("wall.png"); получаю битмап Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(file)); но тут подчеркивается new FileInputStream(file) после того как я напишу сюда file и ошибка: Unhandled exception .

Если положу файл wall.png в корень диска C и укажу file = new File("C:\\wall.png"); или file = new File("C://wall.png"); результат не меняется.

UPD

if (new File("wall.png").exists()) {
    System.out.println("ЕСТь");
}else System.out.println("НЕТ");

не находит, а файл лежит в папке scr

UPD1 объявил

File file;
File[] paths;

в onCreate пишу

file = new File("");
paths = file.listFiles();
System.out.println(paths);

В ответ должен получить все файлы и каталоги корневой папки проекта. А получаю null. По этой же не понятной для меня причине и не находятся файлы по абсолютным путям. Что же я не так делаю

Answer 1

Во-первых, почитайте про относительный и абсолютный путь. Абсолютный указывает реальное местоположение в файловой системе, например, "C:\Program Files". Относительный же ищет относительно рабочей директории. То есть если вы работаете в "C:\Program Files", и введете в пути File "wall.png", без каких-либо уточнений, то к данному имени будет добавлен в начало путь до директории, в которой вы работаете сейчас, в нашем примере полный путь окажется: "C:\Program Files\wall.png".

Про слеши. Если вы пользуетесь "\", то его необходимо экранировать. Некоторые символы без экранирования носят не тот смысл, что бы в них хотите заложить. Например, строка "\n" - переход строки, а "\n" возвратит строки \n, так как слеш был экранирован.

Соответственно, если вы хотите использовать такие слеши "\", то их нужно экранировать и ваш путь получиться следующим (абсолютный): "C:\Program Files\wall.png". Если вы не хотите все время думать об экранировании, то используйте обратные слеши, с ними ваш путь будет выглядеть как: "C:/Program Files/wall.png".

Разумеется, вам необходимо поставить свой путь до файла вместо (абсолютного) "C:/Program Files".

READ ALSO
Создание кэша на java

Создание кэша на java

Задали заданиеСоздать универсальную реализацию кэша

429
Как сохранять вошедшего игрока?

Как сохранять вошедшего игрока?

Есть игра http://nebomobi После входа не нужно заново вводить ник и пароль, так как браузер хранит их в памяти и каким-то образом игра его берет

356
Как изменить цвет поля ввода текста в java?

Как изменить цвет поля ввода текста в java?

есть окно, в нем два элемента - кнопка и текстовое поле(JTextField), как реализовать что бы после удаления символов из поля, оно становилось белым(до...

692
Пройти авторизацию oauth.vk.com

Пройти авторизацию oauth.vk.com

Нужно пройти oauthvk

391