我傻了,之前创建1M文件的时候,我查看文件属性总是发现文件不是1M,一直以为是io流的原因,又是加flush和close也没有用,然后今天我突发奇想的去adbshell看了一下文件属性,结果显示是1M。然后重新测试了一下,pc端显示不是1M,去adbshell里仍然显示1M,然后我把文件管理关了重新打开显示是1M了。代码修改了一下,更加简洁明了。
这次使用随机读写的方式测试文件内容,读写对比了长度和内容。特此记录一下学习情况。后续添加读写性能的测试。
package com.example.testst
//mitac-bu
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import java.io.File
import java.io.FileReader
import java.io.FileWriter
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.*
class MainActivity : AppCompatActivity() {
private var path: String? = null
private var mFileWriter: FileWriter? = null
private val LENGTH = 1024*1024;
var mWriterBuffer: CharArray? = null
var mReaderBuffer: CharArray? = null
private var str: String? = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val btn = findViewById<Button>(R.id.button)
btn.setOnClickListener {
val random=Random()
var bReturn = true
val date = Date()
val timeTemp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(date.time)
path = getExternalFilesDir("")!!.absolutePath
val file = File(path + File.separator + timeTemp + ".txt")
mWriterBuffer = CharArray(LENGTH)
mReaderBuffer = CharArray(LENGTH + 10)
try {
for (i in 0 until LENGTH) {
val number: Int = random.nextInt(62)
mWriterBuffer!![i] = str!![number]
}
mFileWriter = FileWriter(file)
mFileWriter!!.write(mWriterBuffer)
mFileWriter!!.close()
val mFileReader = FileReader(file)
val iRead = mFileReader.read(mReaderBuffer)
mFileReader.close()
if (iRead != LENGTH) {
println("The length isn't correct.")
bReturn = false
} else {
println("The length is correct.")
}
var bSame = true
for (i in 0 until LENGTH) {
if (mReaderBuffer!![i] != mWriterBuffer!![i]) {
bSame = false
}
}
if (bSame) {
println("The file is correct.")
} else {
println("The file isn't correct.")
bReturn = false
}
if (bReturn) {
println("Pass")
} else {
println("Fail")
}
} catch (e: IOException) {
e.printStackTrace()
}
Thread.sleep(1000);
}
}
}