java string dirpath_java – 从URI或原始文件路径重新创建文件时文件长度为0 [getExternalFilesDir(String type)vs getFilesDir(...

首先是一些背景:这个应用程序拍照并上传到Azure blob存储.

使用getApplicationContext()将图片存储在文件(内部存储器)中.getFilesDir();

要上传,我需要调用uploadFromFile(..)函数,如下所示:

CloudBlockBlob.uploadFromFile(String path);

Azure SDK的uploadFromFile函数如下所示:

public void uploadFromFile(final String path) throws StorageException, IOException {

uploadFromFile(path, null /* accessCondition */, null /* options */, null /* opContext */);

}

public void uploadFromFile(final String path, final AccessCondition accessCondition, BlobRequestOptions options,

OperationContext opContext) throws StorageException, IOException {

File file = new File(path);

long fileLength = file.length();

InputStream inputStream = new BufferedInputStream(new FileInputStream(file));

this.upload(inputStream, fileLength, accessCondition, options, opContext);

inputStream.close();

}

问题是在长行fileLength = file.length(); fileLength为0的位置.

我已经使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)对此进行了测试;对于存储目录.这有效.

我需要使用内部存储与外部存储,因为这是该项目特别需要的.

编辑:Android File文档没有提到这种行为.我假设这可能与使用应用程序内部存储有关.

编辑:添加一些代码

我正在向我的相机意图发送一个File mPhotoFile.这将包含照片. mPhotoFileUri包含此文件的URI.以下是使用文件路径的代码.

File file = new File(mPhotoFile.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_234929_1936823724.jpg

boolean fileExists = file.exists(); // true

long fileLength = file.length(); // length 0

以下是从URI获取文件的代码.

File file = new File(mPhotoFileUri.getPath()); // value -> /data/user/0/com.example.devpactapp/files/JPEG_20160209_235534_-1059496729.jpg

boolean fileExists = file.exists(); // true

long fileLength = file.length(); // length 0

我必须将此文件的路径传递给uploadFromFile函数.

我的’回答’中提到的解决方法.

最佳答案 即使我没有所有的信息,我也会打电话给你提供的路径中缺少文件.

javadoc for length()特别提到这种情况将返回0.

因此,在对文件执行任何操作之前,请尝试检查exists().

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值