首页 > 解决方案 > 无法在 android 5.1 上将文件写入内部存储

问题描述

我正在使用下面的代码来读取和写入文件到内部存储

@Throws(Exception::class)
fun readPageFromFile(storageDirectory: File, inputFilename: String): Any? {
    val file = File(
        storageDirectory.toString() +
                File.separatorChar +
                inputFilename
    )
    if (!file.exists())
        return null
    val inputStream: InputStream = FileInputStream(file)
    val objectInputStream = ObjectInputStream(inputStream)
    val any: Any? = objectInputStream.readObject()
    inputStream.close()
    return any
}

@Throws(IOException::class)
fun writePageToFile(
    storageDirectory: File,
    outputFilename: String,
    any: Any
): Any {
    val outputStream: OutputStream = FileOutputStream(
        File(
            storageDirectory.toString() +
                    File.separatorChar +
                    outputFilename
        )
    )
    val objectOutputStream = ObjectOutputStream(outputStream)
    objectOutputStream.writeObject(any)
    outputStream.close()
    return any
}

在 android 5.1 上objectOutputStream.writeObject抛出NoClassDefFoundError: java.util.function.BiFunction,因为操作系统没有这个类

java.lang.NoClassDefFoundError: java.util.function.BiFunction
    at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
    at java.lang.Class.getDexCacheType(Class.java:479)
    at java.lang.reflect.ArtMethod.getDexCacheType(ArtMethod.java:191)
    at java.lang.reflect.ArtMethod.getParameterTypes(ArtMethod.java:136)
    at java.lang.reflect.Method.getParameterTypes(Method.java:174)
    at java.lang.Class.getDeclaredMethods(Class.java:772)
    at java.io.ObjectStreamClass.computeSerialVersionUID(ObjectStreamClass.java:566)
    at java.io.ObjectStreamClass.createClassDesc(ObjectStreamClass.java:279)
    at java.io.ObjectStreamClass.lookupStreamClass(ObjectStreamClass.java:1087)
    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1554)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
    at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:959)
    at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:360)
    at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1054)
    at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1384)
    at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1651)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1497)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1461)
    at core.file.FileUtils.writePageToFile(FileUtils.kt:37)

我还可以使用什么其他替代方法?

标签: androidfilekotlinstorage

解决方案


推荐阅读