gpt4 book ai didi

java - 处理 Uri 而不创建新文件

转载 作者:行者123 更新时间:2023-12-02 00:00:40 27 4
gpt4 key购买 nike

我正在使用的库要求我向其传递文件路径。

目前,我使用 Uri 创建一个新文件(在 AsyncTask 中),如下所示:

@Override
protected String doInBackground(Uri... params) {
File file = null;
int size = -1;
try {
try {
if (returnCursor != null && returnCursor.moveToFirst()){
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
size = (int) returnCursor.getLong(sizeIndex);
}
}
finally {
if (returnCursor != null)
returnCursor.close();
}

if (extension == null){
pathPlusName = folder + "/" + filename;
file = new File(folder + "/" + filename);
}else {
pathPlusName = folder + "/" + filename + "." + extension;
file = new File(folder + "/" + filename + "." + extension);
}

BufferedInputStream bis = new BufferedInputStream(is);
FileOutputStream fos = new FileOutputStream(file);

byte[] data = new byte[1024];
long total = 0;
int count;
while ((count = bis.read(data)) != -1) {
if (!isCancelled()) {
total += count;
if (size != -1) {
publishProgress((int) ((total * 100) / size));
}
fos.write(data, 0, count);
}
}
fos.flush();
fos.close();

} catch (IOException e) {
errorReason = e.getMessage();
}
return file.getAbsolutePath();
}

正如您可以想象的,这可能需要一些时间,具体取决于文件大小。

问题

有什么方法可以访问该文件而无需创建/复制它吗?

*我了解到我可以使用 ContentResolver 以及 openInputStream()openOutputStream() 等方法。但这只会为我提供一个流,并不能解决我必须编写新文件的问题?

<小时/>

额外信息:

我通过将以下内容传递给 Intent 来获取 Uri:

intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);

然后在 onActivityResult 中,我通过调用 data.getData() 获取 Uri。

<小时/>

请不要向我提供类似 this 的解决方案一。我不想从内容 Uri 获取文件 Uri,因为它不可靠且不正确。

最佳答案

很明显,如果您只有内容方案,则无法处理内容方案的库是没有用的。

您必须复制文件中的内容。就像你现在所做的那样。

关于java - 处理 Uri 而不创建新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58180231/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com