无法获取真实文件路径 - Android Oreo 8+
Cannot get the real file path - Android Oreo 8+
我正在使用下载管理器下载文件并将其保存到下载文件夹中。
下载完成后,我会像这样选择文件夹路径:
int uriIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
String downloadedPackageUriString = cursor.getString(uriIndex);
然后我需要使用这个路径来解压下载的文件。解压代码如下:
SouceFile 是 downloadmanager 的路径。
解压缩(字符串源文件,字符串目标文件夹)
try {
zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
ZipEntry ze;
int count;
byte[] buffer = new byte[BUFFER_SIZE];
while ((ze = zis.getNextEntry()) != null) {
String fileName = ze.getName();
fileName = fileName.substring(fileName.indexOf("/") + 1);
File file = new File(destinationFolder, fileName);
File dir = ze.isDirectory() ? file : file.getParentFile();
Log.i("MainService", "Unzipping fileName: " + fileName);
file_path = destinationFolder + "/" + fileName;
if (!dir.isDirectory() && !dir.mkdirs())
throw new FileNotFoundException("Invalid path: " + dir.getAbsolutePath());
if (ze.isDirectory()) continue;
FileOutputStream fout = new FileOutputStream(file);
try {
while ((count = zis.read(buffer)) != -1) {
fout.write(buffer, 0, count);
}
} finally {
fout.close();
}
list_filenames.add(file_downloaded);
}
Log.d("MainService", "TAM:" + tam);
} catch (IOException ioe) {
Log.d("MainService", "Oiiiiiiiiii " + ioe);
return list_filenames;
} finally {
if (zis != null)
try {
zis.close();
} catch (IOException e) {
}
}
解压缩代码适用于 Android 6(我的 phone),但适用于 Android Oreo + 它不适用。
我正在从 zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
获取(没有这样的文件或目录)
加强:我在 Android 6 上没有收到此错误。就在 8+
上
感谢您的帮助。
我尝试了其他有类似问题的人的一些建议,但对我不起作用。
I'm not getting this error on Android 6
至多,您在 Android 6.0 上测试的一台设备上不会出现此错误。设备型号很多运行Android6.0,不止一个
COLUMN_LOCAL_URI
应该为您提供 Uri
的字符串表示形式。这不适用于 FileInputStream
,因为 Uri
不是文件。
替换:
zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
与:
zis = new ZipInputStream(new BufferedInputStream(cr.openInputStream(Uri.parse(sourceFile))));
...其中 cr
是一个 ContentResolver
,您可以通过在某些 Context
.
上调用 getContentResolver()
获得
我正在使用下载管理器下载文件并将其保存到下载文件夹中。 下载完成后,我会像这样选择文件夹路径:
int uriIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
String downloadedPackageUriString = cursor.getString(uriIndex);
然后我需要使用这个路径来解压下载的文件。解压代码如下:
SouceFile 是 downloadmanager 的路径。
解压缩(字符串源文件,字符串目标文件夹)
try {
zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
ZipEntry ze;
int count;
byte[] buffer = new byte[BUFFER_SIZE];
while ((ze = zis.getNextEntry()) != null) {
String fileName = ze.getName();
fileName = fileName.substring(fileName.indexOf("/") + 1);
File file = new File(destinationFolder, fileName);
File dir = ze.isDirectory() ? file : file.getParentFile();
Log.i("MainService", "Unzipping fileName: " + fileName);
file_path = destinationFolder + "/" + fileName;
if (!dir.isDirectory() && !dir.mkdirs())
throw new FileNotFoundException("Invalid path: " + dir.getAbsolutePath());
if (ze.isDirectory()) continue;
FileOutputStream fout = new FileOutputStream(file);
try {
while ((count = zis.read(buffer)) != -1) {
fout.write(buffer, 0, count);
}
} finally {
fout.close();
}
list_filenames.add(file_downloaded);
}
Log.d("MainService", "TAM:" + tam);
} catch (IOException ioe) {
Log.d("MainService", "Oiiiiiiiiii " + ioe);
return list_filenames;
} finally {
if (zis != null)
try {
zis.close();
} catch (IOException e) {
}
}
解压缩代码适用于 Android 6(我的 phone),但适用于 Android Oreo + 它不适用。
我正在从 zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
加强:我在 Android 6 上没有收到此错误。就在 8+
上感谢您的帮助。
我尝试了其他有类似问题的人的一些建议,但对我不起作用。
I'm not getting this error on Android 6
至多,您在 Android 6.0 上测试的一台设备上不会出现此错误。设备型号很多运行Android6.0,不止一个
COLUMN_LOCAL_URI
应该为您提供 Uri
的字符串表示形式。这不适用于 FileInputStream
,因为 Uri
不是文件。
替换:
zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(sourceFile)));
与:
zis = new ZipInputStream(new BufferedInputStream(cr.openInputStream(Uri.parse(sourceFile))));
...其中 cr
是一个 ContentResolver
,您可以通过在某些 Context
.
getContentResolver()
获得