我要列出文件夹内的所有文件.只有两个文件,a. js和. json

enter image description here

这是我的代码,但它不工作,每次我点击控制台打印No files found or directory does not exist.我不知道文件的文件夹是否必须在其他位置或问题的路径.我遵循这example

class MainActivity : ComponentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContent {
         ReadFilesTheme {
            // A surface container using the 'background' color from the theme
            Surface(
               color = MaterialTheme.colorScheme.background
            ) {
               Column {
                  ReadJSFilesButton()
               }
            }
         }
      }
   }
}

@Composable
fun ReadJSFilesButton() {
   Button(
      onClick = { read() }
   ) {
      Text(text = "get files")
   }
}

fun read() {
   val directoryPath = "com/example/readfiles/files"
   val directory = File(directoryPath)
   val files = directory.listFiles()?.filter { it.isFile }
   files?.forEach { file ->
      println(file.name)
   } ?: println("No files found or directory does not exist.")
}

推荐答案

我终于找到了解决办法.也许有一个更简单的方法,但这就是我的工作:

class MainActivity : ComponentActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      setContent {
         MainActivityLayout()
      }
   }
}

@Composable
fun MainActivityLayout() {
   val context = LocalContext.current
   val assetManager = context.assets

   Column(
      modifier = Modifier.fillMaxSize(),
      horizontalAlignment = Alignment.CenterHorizontally
   ) {
      var fileList by remember { mutableStateOf(emptyList<String>()) }

      Button(
         onClick = {
            val files = assetManager.list("files")
            fileList = files?.toList() ?: emptyList()
         },
         modifier = Modifier.fillMaxWidth()
      ) {
         Text("List Files")
      }

      ShowFileList(fileList)
   }
}

@Composable
fun ShowFileList(fileList: List<String>) {
   Column {
      Text("Files in assets/files:")
      fileList.forEach {
         Text(it)
      }
   }
}

正如在 comments 和最后一个答案中所说的,我必须创建assets资源 文件夹,并将包含我想要列出的文件的文件夹放在那里.

Android相关问答推荐

以编程方式更改Android应用程序上的文件许可

Jetpack Compose Scaffold—content不在TopAppBar下面开始'

懒惰的垂直网格中盒子的重量-Jetpack组合

如何从Android 12的来电中获取电话号码?

Android手柄注射周期错误,多个模块引用一个核心模块

为什么 Android Compose 将片段作为参数传递给 Composables 函数?

Jetpack Compose X.dp 性能问题?

@Immutable 对数据类有什么好处?

React Native Android 应用程序在调试模式下运行良好,但当我们发布 apk 时,它会生成旧版本的应用程序

为卡片的上半部分添加一个边框,用圆角半径组合

每次在 Jetpack Compose 中调用导航

Jetpack Compose Material3 禁用 ListItem

Android 自动分页如何与 media3 配合使用?

当我更改 ViewModel var 时,Kotlin + Compose 中的 Composable 不会更新

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时

ObjectBox,如何在冲突中放弃一切迁移?

在 android-billing-5.0 中获取 ProductDetails 价格

Android Java Keystore 在另一台机器上损坏

在 compose 屏幕之间传递 uri 会导致:SecurityException: Permission Denial

如何获取 Material Design 3 的底部导航栏高度?