Android中遇到java.lang.NoSuchMethodError: java.io.File.toPath()Ljava/nio/file/Path的问题

本来想把标题写的更精细点,便于遇到同样问题的人很快命中,别浪费时间,因为这个题目太泛泛,网上这种题目重复率很高,遇到的场景和产生的原因也可能各不相同,大多也是Java项目中的,比如使用tomcat时遇到等,这里是android中遇到,不是单纯的java项目[笑哭.png]。最终,标题只允许100字符,所以也就这样了。

首先,这是我在Android中使用org.apche.commons.io库做文件夹的递归删除时遇到的一个小坑。

其次,我的解决方法只针对我自己的场景去说,可能无法覆盖全面,但是你知道问题的原因了,其实可以自己去针对解决,方法很多。

最后,题目中的重点是File类的toPath方法没找到,而点开这个类去看了一下,确实有这个方法,如下图1:

图1.

Android中遇到java.lang.NoSuchMethodError: java.io.File.toPath()Ljava/nio/file/Path的问题_第1张图片

画红框处应该注意到了吧?这就是问题之一,如果你使用的jdk版本低于1.7,那么这个问题就理所应当出现了。不过,我写这篇文章时是2020年6月了,还在使用版本小于jdk1.7的人可能不太多了,如果是使用低版本的jdk,那铁定得放弃使用这个方法了。

而我使用的是jdk1.8,自然不是因为这个原因。

我的原因是使用的 Android版本低了些...[捂脸.png],这个方法要求最低sdk版本为26,也就是Android O

下面图2是我在用这个库中的FileUtils类递归删除某个文件夹尝试过的三个方法,编译没问题,最终运行都会报错,和标题一样的,最终都指向了toPath,自己打开源码去看吧,这里不贴了。

图2.

Android中遇到java.lang.NoSuchMethodError: java.io.File.toPath()Ljava/nio/file/Path的问题_第2张图片

而我发现这个原因也有点运气成分:既然代码中确实有这个方法,但是运行时却没有,并且使用了jdk1.8,那到底怎么回事?于是我自己直接调用这个方法看看,结果还没等编译就发现问题了,如图3:

图3.

Android中遇到java.lang.NoSuchMethodError: java.io.File.toPath()Ljava/nio/file/Path的问题_第3张图片

相信到了这里都知道原因了,我也就不多说了,解决方式也是因人而异,我最终自己写个递归删除文件夹的方法,不用这个库里的这个方法,因为这显然对sdk版本要求有点高啊,即便是2020年6月,我们面对的设备也有很多是Android7.0的,也不敢保证绝大多数都是Android8.0以上了。

你可能感兴趣的:(Android中遇到java.lang.NoSuchMethodError: java.io.File.toPath()Ljava/nio/file/Path的问题)