我的资源的原始文件夹中有一个视频文件。我想找到文件的大小。我有这段代码:
Uri filePath = Uri.parse("android.resource://com.android.FileTransfer/" + R.raw.video);
File videoFile = new File(filePath.getPath());
Log.v("LOG", "FILE SIZE "+videoFile.length());
但它总是告诉我大小是 0。我做错了什么?
试试以下行:
InputStream ins = context.getResources().openRawResource (R.raw.video)
int videoSize = ins.available();
试试这个:
AssetFileDescriptor sampleFD = getResources().openRawResourceFd(R.raw.video);
long size = sampleFD.getLength()
不能将File
用于资源。使用 Resources
或 AssetManager
获取对资源的InputStream
,然后对其调用 available()
方法。
喜欢这个:
InputStream is = context.getResources().openRawResource(R.raw.nameOfFile);
int sizeOfInputStram = is.available(); // Get the size of the stream
答案略有不同@shem
AssetFileDescriptor afd = contentResolver.openAssetFileDescriptor(fileUri,"r");
long fileSize = afd.getLength();
afd.close();
其中fileUri
属于安卓Uri
类型
可重用的 Kotlin 扩展
您可以在上下文或活动上调用它们。它们是异常安全的
fun Context.assetSize(resourceId: Int): Long =
try {
resources.openRawResourceFd(resourceId).length
} catch (e: Resources.NotFoundException) {
0
}
这个不如第一个好,但在某些情况下可能需要
fun Context.assetSize(resourceUri: Uri): Long {
try {
val descriptor = contentResolver.openAssetFileDescriptor(resourceUri, "r")
val size = descriptor?.length ?: return 0
descriptor.close()
return size
} catch (e: Resources.NotFoundException) {
return 0
}
}
如果你想要一种简单的方法来获得不同的字节表示形式,你可以使用这些
val Long.asKb get() = this.toFloat() / 1024
val Long.asMb get() = asKb / 1024
val Long.asGb get() = asMb / 1024