欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IDEA报'\ufeff'错误

程序员文章站 2022-06-13 18:02:21
...

导致这个错误的原因基本都是导入Eclipse的项目所致。网上很多的方法是用各种高级Notepad来转编码的方法,但是我认为这个一个个转,非常非常非常愚蠢,实在是太浪费时间了。

 

依我的观察发现,这个'\ufeff'只出现在文件的第一行,package的前面,这个字符并不显示,也看不见,但是它真实存在!因此处理方法很简单,删除文件开始第一个字符就行了,根本不用转编码格式!!程序猿用程序猿的方法,遍历包中的所有文件,删第一个字符就行了,何必浪费时间一个个改呢?

 

上代码,代码是Kotlin,为了简洁,并没有上递归遍历,只是单纯修改一个包下的所有文件,有兴趣的可以加上递归方法。

 

val fileList = File(foldPath)
fileList.listFiles().forEach {
    println("file name is ${it.name}")
    var readContent = it.readContent { }
    if(readContent.first()=='p'){

    }else{
        readContent=readContent.substring(1,readContent.length)
        it.writeText(readContent)
    }
}

其中readContent是我自己写的扩展方法,writeText是Kotlin自己的扩展方法

 

以下是readContent扩展方法:

fun File.readContent(noFound: () -> Unit = {}): String {
    val readSize = this.length().toInt()
    if (!this.exists()) {
        fileNotFound()
        noFound()
        return ""
    }
    val fileInputStream = FileInputStream(this)
    val byteArray = ByteArray(readSize)
    val stringBuffer = StringBuffer()
    val bufferedInputStream = BufferedInputStream(fileInputStream)
    bufferedInputStream.buffered(64 * 1024)
    while (true) {
        val read = bufferedInputStream.read(byteArray)
        println("读取的长度为$read")
        if (read == -1) {
            break
        }
        stringBuffer.append(String(byteArray, Charset.forName("UTF-8")))
    }
    bufferedInputStream.close()
    fileInputStream.close()
    return stringBuffer.toString()
}