【问题标题】:deleteDirectory: java.lang.NoSuchMethodError: No virtual method toPathdeleteDirectory: java.lang.NoSuchMethodError: 没有虚拟方法 toPath
【发布时间】:2019-11-20 02:10:04
【问题描述】:

Android Studio 3.4.2 安卓6.0

dependencies {
    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.google.code.gson:gson:2.8.5'
    implementation 'commons-io:commons-io:2.6'
    implementation 'edu.vt.middleware:vt-password:3.1.2'
    implementation 'org.apache.commons:commons-collections4:4.1'

    implementation "org.androidannotations:androidannotations-api:$AAVersion"

在android 6.0代码成功工作之前

 import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
       import org.apache.commons.io.FileUtils;

private File myPhotoTempDir;
    if (myPhotoTempDir != null && myPhotoTempDir.exists()) {
                    FileUtils.deleteDirectory(myPhotoTempDir);
    }

在 Android 6.0 上出现运行时错误:

FATAL EXCEPTION: main
Process: com.myproject.debug, PID: 7667
java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration of 'java.io.File' appears in /system/framework/core-libart.jar)
    at org.apache.commons.io.FileUtils.isSymlink(FileUtils.java:3107)
    at org.apache.commons.io.FileUtils.deleteDirectory(FileUtils.java:1616)
    at com.myproject.profile.EditProfileFragment.goToPrevScreen(EditProfileFragment.java:915)
    at com.myproject.profile.EditProfileFragment_.access$201(EditProfileFragment_.java:20)
    at com.myproject.profile.EditProfileFragment_$3.run(EditProfileFragment_.java:95)

我的代码有什么问题? 谢谢。

【问题讨论】:

  • 我也面临同样的问题。你找到解决办法了吗?
  • @ChiragMittal 我排除 apache lib,并使用纯 java 方法(开箱即用)删除目录
  • 是的,我想这是最好的方法。谢谢。
  • 你能提供代码你是如何解决这个问题的吗?

标签: android apache-commons


【解决方案1】:

我也有同样的问题。

此代码导致与您描述的相同的错误:

private void clearHttpCacheDirectory(String fileName) {
        File httpCacheDirectory = new File(getCacheDir(), fileName);
        try {
            FileUtils.deleteDirectory(httpCacheDirectory);
        } catch (Exception e) {
            Crashlytics.log(e.getMessage());
        }
    }

这个库工作正常,但对我来说看起来很旧:

implementation group: 'commons-io', name: 'commons-io', version: '2.4'

但是这个崩溃了:

implementation group: 'commons-io', name: 'commons-io', version: '2.6'

所以我决定使用 2.5 版本,因为如果我们看官方版本,2.6 版本有三个候选版本,还没有稳定版本。所以这对我有用:https://github.com/apache/commons-io/releases

【讨论】:

    【解决方案2】:

    我在使用 commons-io-2.7 时遇到了这个错误,但是当我返回 commons-io-2.5 时,一切正常。

    从这里得到它:https://downloads.apache.org//commons/io/binaries/commons-io-2.5-bin.zip

    【讨论】:

    • 同样的事情 - 提升 commons.io 版本,突然所有运行 Android 6 或 7 的设备开始崩溃,因为较新版本的 commons.io 库需要 Java 7,而那些旧手机运行 Java 6 . 降级到 commons.io 2.5,并计划很快将库从我们的应用程序中淘汰。
    【解决方案3】:

    我在 Kotlin 中使用了以下 solution。 基本上,Kotlin 中默认的 deleteRecursively 方法。

    【讨论】:

      猜你喜欢
      • 2020-10-28
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      相关资源
      最近更新 更多