java.nio.file jar,jar中的Java访问文件导致java.nio.file.FileSystemNotFoundException

在尝试使用我的java应用程序将jar文件中的某些文件复制到临时目录时,会抛出以下异常:

java.nio.file.FileSystemNotFoundException

at com.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)

at com.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)

at java.nio.file.Paths.get(Unknown Source)

at com.sora.util.walltoggle.pro.WebViewPresentation.setupTempFiles(WebViewPresentation.java:83)

....

这是我的一小部分setupTempFiles(带行号):

81. URI uri = getClass().getResource("/webViewPresentation").toURI();

//prints: URI->jar:file:/C:/Users/Tom/Dropbox/WallTogglePro.jar!/webViewPresentation

82. System.out.println("URI->" + uri );

83. Path source = Paths.get(uri);

该webViewPresentation目录位于我的jar的根目录中:

941461600b19190e068316f29c6247e1.png

当我将我的应用程序打包为jar时,此问题才会退出,在Eclipse中进行调试没有问题.我怀疑这与这个bug有关,但我不确定如何纠正这个问题.

任何帮助赞赏

如果事项:

我在Java 8 build 1.8.0-b132上

Windows 7 Ult.64位

<think>好的,用户遇到了一个java.nio.file.NoSuchFileException: dex2jar的错误,我需要先理解这个问题的原因。首先,用户之前的问题是关于dex2jar执行后没有生成jar文件,现在这个错误可能是在执行过程中找不到某个文件或路径。 首先,NoSuchFileException通常表示Java程序试图访问一个不存在的文件或目录。可能的情况是用户执行的命令中指定的dex2jar路径不正确,或者环境变量没有配置好。用户可能直接输入了“dex2jar”作为命令,而系统找不到这个可执行文件,或者脚本的路径没有添加到系统PATH中。 接下来,我需要回忆常见的解决方案。比如,检查用户是否正确安装了dex2jar,是否在正确的目录下执行命令,或者是否使用了正确的命令名称。比如,dex2jar的Windows版本通常使用d2j-dex2jar.bat这个批处理文件,而不是直接使用dex2jar命令。如果用户没有配置环境变量,可能需要进入工具目录执行,或者使用绝对路径。 另外,用户可能将dex2jar工具解压到了某个目录,但没有正确配置路径。例如,在Linux或Mac中可能需要添加环境变量,或者在Windows中需要将路径添加到系统变量里。如果用户直接运行命令而没有指定完整路径,系统就会报找不到文件的错误。 还要考虑用户是否在命令中正确指定了输入文件。比如,是否遗漏了输入的classes.dex文件路径,或者路径中有空格没有用引号包裹。比如,如果路径中有空格,必须用双引号括起来,否则会被解析成多个参数,导致文件不存在的问题。 此外,用户可能下载的dex2jar版本有问题,或者文件损坏,导致某些必要的脚本或jar文件缺失。这时候需要建议用户重新下载并解压工具包,确保所有文件完整。 还可能用户的Java环境有问题,虽然之前的回答中提到过检查Java版本,但可能用户没有正确安装或者版本不兼容。不过NoSuchFileException更可能直接与文件路径有关,而不是Java环境。 另外,用户的操作系统可能不同,比如在Linux下使用.sh脚本,而用户可能错误地使用了.bat脚本,或者在Windows下没有正确使用批处理文件。需要提醒用户根据操作系统选择正确的脚本。 总结可能的解决步骤: 1. 确认dex2jar是否正确安装,路径是否正确。 2. 检查命令是否正确,是否使用了正确的脚本名称(如d2j-dex2jar.bat)。 3. 确保输入文件路径正确,处理空格问题。 4. 检查环境变量配置,或者使用绝对路径执行命令。 5. 重新下载并解压dex2jar工具,确保文件完整性。 6. 确认操作系统与脚本的兼容性(.bat用于Windows,.sh用于Linux/Mac)。 现在需要将这些步骤以清晰的结构呈现给用户,分点说明可能的原因和对应的解决方法,帮助用户逐步排查问题。同时要使用用户友好的语言,避免技术术语过多,但保持准确性。另外,可能需要给出具体的命令示例,比如如何进入目录执行,如何指定绝对路径等,方便用户直接复制操作。 最后,提醒用户如果问题仍未解决,可以提供更多细节,如完整的命令、错误日志,以便进一步分析。</think>### **问题分析** 出现 `java.nio.file.NoSuchFileException: dex2jar` 错误时,表明系统或程序未找到 `dex2jar` 相关文件或路径。以下是可能的原因及解决方案: --- ### **一、核心原因** 1. **命令名称错误** - **现象**:直接使用 `dex2jar` 作为命令,但实际工具主脚本名为 `d2j-dex2jar.bat`(Windows)或 `d2j-dex2jar.sh`(Linux/Mac)。 - **验证**:检查工具目录中是否存在 `d2j-dex2jar.bat` 文件。 2. **路径未正确配置** - **现象**:未进入 `dex2jar` 工具目录直接执行命令,或未将工具目录添加到系统环境变量。 - **验证**:命令行中执行 `dir d2j-dex2jar.bat`(Windows)或 `ls d2j-dex2jar.sh`(Linux/Mac),若提示找不到文件,说明路径错误。 3. **文件未解压或损坏** - **现象**:`dex2jar` 工具包未完整解压(如被安全软件拦截),导致关键文件缺失。 - **验证**:检查工具包是否包含 `lib` 目录及 `.bat`/`.sh` 脚本。 --- ### **二、解决方案** #### **步骤 1:确认命令格式正确** - **Windows**:使用 `d2j-dex2jar.bat` 而非 `dex2jar`。 ```bash # 格式示例 d2j-dex2jar.bat <输入DEX文件路径> -o <输出JAR路径> ``` - **Linux/Mac**:使用 `d2j-dex2jar.sh` 并赋予执行权限: ```bash chmod +x d2j-dex2jar.sh ./d2j-dex2jar.sh <输入DEX文件路径> -o <输出JAR路径> ``` #### **步骤 2:进入工具目录执行命令** - 若未配置环境变量,需先进入 `dex2jar` 解压后的目录: ```bash cd C:\dex-tools-2.1 # Windows示例路径 d2j-dex2jar.bat D:\input\classes.dex -o D:\output\result.jar ``` #### **步骤 3:检查工具完整性** 1. 重新从 [官方GitHub](https://github.com/pxb1988/dex2jar/releases) 下载最新版工具包。 2. 使用 **WinRAR/7-Zip** 解压(避免文件损坏)。 3. 确认解压后目录包含以下关键文件: - `d2j-dex2jar.bat`(Windows) - `d2j-dex2jar.sh`(Linux/Mac) - `lib` 目录(内含依赖库) #### **步骤 4:使用绝对路径避免歧义** - 输入/输出路径中若含空格或特殊字符,需用引号包裹: ```bash d2j-dex2jar.bat "C:\test folder\classes.dex" -o "C:\output folder\result.jar" ``` --- ### **三、排查进阶问题** 1. **Java环境兼容性** - 执行 `java -version` 确认已安装 **Java 8+**(低版本可能导致兼容性问题)。 2. **权限问题(Linux/Mac)** - 若提示权限不足,为脚本添加执行权限: ```bash chmod +x *.sh ``` 3. **依赖缺失** - 确保 `lib` 目录中的 `.jar` 文件未被删除或损坏。 --- ### **四、操作示例(Windows)** ```bash # 1. 进入工具目录 cd C:\dex-tools-2.1 # 2. 执行转换命令(绝对路径) d2j-dex2jar.bat "D:\apk\classes.dex" -o "D:\apk\output.jar" # 3. 检查输出 dir D:\apk\output.jar ``` --- ### **总结** 若仍报错,请提供以下信息进一步分析: 1. 完整的命令行输入内容。 2. `dex2jar` 工具目录的文件列表截图。 3. 操作系统类型及Java版本。 4. 错误日志全文(若有其他隐藏报错)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值