exists=true
canExecute=false
canRead=true
canWrite=true
isDirectory=false
lastModified=Fri Jun 11 14:05:38 GMT+08:00 2021
length=7785185
dir.isDirectory=true
dir.lastModified=Fri Jun 11 14:13:14 GMT+08:00 2021
dir.length=4096
注意,.length()
只能返回文件的大小(单位为字节),文件夹的实际大小无法返回。
文件夹操作
val dir = File(getExternalFilesDir(“”)?.absolutePath + “/myDir/dir1”)
dir.mkdirs()//创建一个文件目录。若上层文件目录不存在,一并创建
val appDir = File(getExternalFilesDir(“”)?.absolutePath)
dir.mkdirs()
val files = appDir.listFiles() //返回目录下的文件列表
for (i in files) {
println(i)
}
val filePaths = appDir.list()//返回目录下文件名和文件夹名称数组
for (i in filePaths) {
println(i)
}
输出
/storage/emulated/0/Android/data/zx.com.demo/files/myDir
/storage/emulated/0/Android/data/zx.com.demo/files/zx1001.txt
/storage/emulated/0/Android/data/zx.com.demo/files/app-debug.apk
myDir
zx1001.txt
app-debug.apk
kotlin对File的扩展
以上这些示例中用的都是Java提供的API,kotlin提供了一些扩展方法和扩展属性,可以更加方便的操作文件。
名称 | 作用 |
---|---|
extension | 文件格式的后缀,不包括. ,例如:mp3 |
nameWithoutExtension | 名称,不包括后缀 |
appendBytes(ByteArray) | 追加字节数组到文件末尾 |
writeBytes(ByteArray) | 写入字节数组,如果之前有内容,会被覆盖 |
readBytes(): ByteArray | 以字节数组的形式获取此文件的全部内容,不建议在大文件上使用此方法,上限2G |
appendText(String,Charset) | 追加字符串到文件末尾,默认是UTF-8编码 |
writeText(String,Charset) | 写入字符串,如果之前有内容,会被覆盖 |
readText(Charset): String | 以String 形式获取此文件的全部内容,默认编码UTF-8,不建议在大文件上使用此方法,上限2G |
reader(Charset): InputStreamReader | 返回一个FileReader以读取此文件的内容 |
bufferedReader(Charset, bufferSize: Int): BufferedReader | 返回一个BufferedReader用于读取此文件的内容 |
writer(Charset):OutputStreamWriter | 返回一个FileWriter用于写入此文件 |
bufferedWriter(Charset, bufferSize: Int): BufferedWriter | 返回一个BufferedWriter用于写入此文件 |
forEachBlock(action: (buffer: ByteArray, bytesRead: Int) -> Unit) | 高阶函数,按字节块读取文件并为每个读取的块调用action,字节块默认为4096。适用于大文件 |
forEachLine(Charset, action: (line: String) -> Unit) | 高阶函数,按行读取文件并为每行调用action,适用于大文件 |