Java:从URI构造文件?

时间:2010-02-28 16:09:29

标签: java android

我需要从URI中获取一个File对象,使用Java工作,但保持长度为零 - 尽管我知道文件大小不为零。

我需要将File对象传递给another constructor

我不确定是不是因为我以错误的方式构建它?这是我的代码:

    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 :(得分:0)

确保您的URI指向文件。

videoFile不会为null,因为您可能正在创建新文件。因此,videoFile并不代表您认为的实际文件,这就是您获得0长度的原因。

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

尝试使用带有URI的File constructor

答案 1 :(得分:0)

如果文件存在,但其长度“意外”为零,那么您在同一程序(或在同一上下文中运行的另一个程序)中预先创建/写入此文件的可能性很大,但是没有关闭OutputStream。普通的Java IO习惯用法是在使用后关闭流。另请参阅this Sun tutorial以获取示例。

答案 2 :(得分:0)

需要注意的一件重要事情是你从

获得的文件对象
File videoFile = new File(videoURI.getPath());

永远不会为null,就像从构造函数调用中获取的任何对象一样。如果构造函数抛出异常,那么从构造函数中获取对象的唯一方法就是这样。所以null检查返回值作为检查以查看文件是否存在实际上对你没有任何作用,如果你真的想知道文件是否退出,你应该使用videoFile.exists()代替。直接获取URI的File构造函数可能是一个更好的选择,因为它将执行所有必要的检查以确保uri可以用作文件并正确地从uri中提取文件路径。

答案 3 :(得分:0)

我也曾经打了4个小时。找到了与机器无关的解决方案:

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

mFile在win / linux / mac中有正确的路径,可以正常工作。