gpt4 book ai didi

Java-FileNotFoundException :/mnt/sdcard: open failed: EISDIR (Is a directory)

转载 作者:行者123 更新时间:2023-11-29 04:58:18 29 4
gpt4 key购买 nike

我正在尝试从 SD 卡解压缩我的 Android 设备上的 RAR 存档,但出现错误:

 java.io.FileNotFoundException: /mnt/sdcard: open failed: EISDIR (Is a directory)

我选择了一个 rar 文件并尝试将其解压到我的 sd 卡中。错误说它不是目录,但它是。我不知道该如何解决。

我的代码:

public static void unrar(File srcRarFile, String destPath, String password) throws IOException {
if (null == srcRarFile || !srcRarFile.exists()) {
throw new IOException(".");
}
if (!destPath.endsWith(SEPARATOR)) {
destPath += SEPARATOR;
}
Archive archive = null;
OutputStream unOut = null;
try {
archive = new Archive(srcRarFile, password, false);
FileHeader fileHeader = archive.nextFileHeader();

while(null != fileHeader) {
if (!fileHeader.isDirectory())
{
// 1 destDirName destFileName
String destFileName = "";
String destDirName = "";

destFileName = (destPath + fileHeader.getFileNameW()).replaceAll("/", "\\\\");
destDirName = destFileName.substring(0, destFileName.lastIndexOf("\\"));

// 2


File dir = new File(destDirName);
if (!dir.exists() || !dir.isDirectory()) {
dir.mkdirs();
}
//


// ERROR:
unOut = new FileOutputStream(dir);

archive.extractFile(fileHeader, unOut);

unOut.flush();
unOut.close();
}
fileHeader = archive.nextFileHeader();
}
archive.close();
} catch (RarException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(unOut);
}
}

最佳答案

清楚的事情。您首先创建目录 /mnt/sdcard(变量 dir 等于代码中的 destDirName),然后您尝试创建一个文件一样一样。这是行不通的。使用像 /mnt/sdcard/abc.rar 这样的名称,它可能会起作用。以下是创建相应文件对象的方法:

File file = new File(dir, "abc.rar");

顺便说一句:由于缺少权限,创建一个名为 /mnt/sdcard 的目录可能无法工作。如果是 SD 卡,Android 无论如何都会为您完成这项工作。如果不是 SD 卡,则不建议使用此名称创建目录。

PS2:在进一步检查你的代码后,我发现了一些不太好的风格:

  1. 您正在使用分隔符变量和 indexOf/substring 来查找父目录。
  2. 您将“/”(android 路径分隔符)替换为仅在 Windows 中使用的“\”
  3. Filestring 之间交换

您可以使用 File.getParent()/File.getParentFile() 简单地摆脱所有这些问题

关于Java-FileNotFoundException :/mnt/sdcard: open failed: EISDIR (Is a directory),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32921450/

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