【android studio】建立1M的檔案,內容隨機,對其進行讀寫驗證
阿新 • • 發佈:2020-12-30
技術標籤:android studioandroid studiojava
我傻了,之前建立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);
}
}
}