kotlin
Q&A
package com.example.mymovie
import android.os.Bundle
import android.os.Environment
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import com.example.mymovie.ui.theme.MyMovieTheme
import java.io.File
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyMovieTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
/内部ストレージのパス取得/
val path = Environment.getExternalStorageDirectory().getPath()
val dir = File(path)
/*内部ストレージのファイルオブジェクトを渡す*/
val imgserch=ImgFilecon()
imgserch.extract(dir)
ImgFilecon().extract(dir)
val list=ImgFilecon().dirurllist()
Text(text=list.toString())
}
}
}
}
}
class ImgFilecon() {
var imgdirurl: MutableList<String> = mutableListOf()
fun extract(dir: File) {
for (i in dir.listFiles()) {
if (i.listFiles() != null) imgserch(0, i.listFiles().reversed(), false, i)
}
}
tailrec fun imgserch(i: Int, filelist: List<File>, flag: Boolean, dir: File): Boolean {
if (flag && !dir.isDirectory) return true
if (filelist[i].isFile && !flag) {
when (Extension().extensionsplit(i.toString(), ".")) {
"mp4", "MP4" -> {
val data = i.toString()
imgdirurl.add(data)
return imgserch(i + 1, filelist, true, dir)
}
else -> { return imgserch(i + 1, filelist, false, dir) }
}
}
if(filelist[i].isFile && flag) return imgserch(i+1,filelist,true,dir)
if (filelist[i].isDirectory && flag) return imgserch(0, filelist[i].listFiles().reversed(), false, filelist[i])
if (filelist[i].isDirectory && !flag) return imgserch(i+1, filelist,false,filelist[i])
return true
}
fun dirurllist():MutableList<String>{
return imgdirurl
}
}
class Extension {
/*区切り文字で分割するメソッド*/
fun extensionsplit(filename: String, splitps: String): String {
/*splitpsで指定した文字のindex*/
val point = filename.lastIndexOf(splitps)
if (point != -1) {
/*pointより下の部分を切り出す*/
/* 例 xxxx.jpg→jpg*/
return filename.substring(startIndex = point + 1)
}
else return null.toString()
}
}
解決したいこと
index 4 outofbounds length 4がでます。
どうしたらいいのでしょう。