Java: создание файла из URI? - PullRequest
       31

Java: создание файла из URI?

1 голос
/ 28 февраля 2010

Мне нужно получить объект File из URI, работающего в Java, но продолжаю получать нулевую длину - хотя я знаю, что размер файла не равен нулю.

Мне нужен объект File для передачи другому конструктору .

Я не уверен, что это потому, что я неправильно его строю? Вот мой код:

    File videoFile = new File(videoURI.getPath());
    if (videoFile == null) {
        Log.d(LOG_TAG, "File not found!");
        return false;
    }

    Log.d(LOG_TAG, "about to upload, filepath: " + videoFile.getPath());

    Log.d(LOG_TAG, "File length: " + String.valueOf(videoFile.length()));

Вывод журнала не выводит «Файл не найден!» И печатает ненулевой путь, но показывает длину 0.

Ответы [ 4 ]

0 голосов
/ 08 июня 2012

Я тоже боролся с этим 4 часа. Обнаружено машинно-независимое решение:

File mFile = new File(new Path(mUri.getPath()).toString);

mFile будет иметь правильный путь в win / linux / mac и может нормально работать.

0 голосов
/ 28 февраля 2010

Если файл существует, но его длина «неожиданно» равна нулю, велика вероятность, что вы создали / записали этот файл заранее в той же программе (или другой программе, работающей в том же контексте), но не закрыть его OutputStream. Обычная идиома Java IO - закрывать потоки после использования. Также см. этот учебник Sun для примера.

0 голосов
/ 01 марта 2010

Важно отметить, что файловый объект, который вы получаете от

File videoFile = new File(videoURI.getPath());

никогда не будет нулевым, как с любым объектом, который вы получаете от вызова конструктора. Единственный способ не получить объект обратно из конструктора, это если конструктор выдает исключение. Так что нулевая проверка возврата как проверка того, существует ли файл, на самом деле ничего не делает для вас, если вы действительно хотите знать, выходит файл или нет, вы должны использовать videoFile.exists() вместо этого. Конструктор файлов, который принимает URI напрямую, вероятно, будет лучшим вариантом для вас, поскольку он выполнит всю необходимую проверку, чтобы убедиться, что URI может использоваться как файл, и правильно извлечет путь к файлу из URI. *

0 голосов
/ 28 февраля 2010

Убедитесь, что ваш URI указывает на файл.

videoFile не будет нулевым, поскольку вы, возможно, создаете новый файл. Таким образом, videoFile не представляет реальный файл, который вы думаете, и поэтому вы получаете длину 0.

File videoFile = new File(videoURI.getPath()); // videoFile != null

Попробуйте использовать Конструктор файла , который принимает URI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...