使用luajava实现lua遍历文件

介绍

首先需要说明luaj和luajava不是一个东西 luaj是java的一个库 而luajava是lua的库 luaj允许java运行lua代码 也可以调用lua的变量或全局库ENV等等 而luajava是允许lua调用java对象 其中包括但不限于构造方法 成员方法 静态方法等 但调用的这些方法必须是公有的 也就是public修饰的方法

那么该怎么调用他呢?

如果你使用的是gg的话 那比较简单 首先你要先找到支持luajava的gg 有rlgg elgg 还有独猫的luajava库的gg

然后直接import导入就行了

那么如果不是呢?

其实也很简单 如果不是gg的话相信都是做软件的 那么应该都不需要说 如果有疑问可以自己搜一下

File对象

这里说的File对象是java层的对象 是java用来操作文件的 他在java.io.File包下

如果使用gg的话只需要

import 'java.io.File'
file=File()
print(file:getName())

也可以使用

file=luajava.newInstance("java.io.File")
-- 如果需要传参 file=luajava.newInstance("java.io.File",参数)

得到的对象都是一样的

需要注意的是静态方法需要使用Class.method

例如Thread对象的sleep静态方法就需要这样调用

import 'java.lang.Thread'

Thread.sleep(1000)

-- 或者

luajava.newInstance("java.lang.Thread").sleep(1000)

而非静态对象需要使用Class:method()调用

比如File对象的getName方法

import 'java.io.File'
file=File()
print(file:getName())

实际代码

--- 该项目遵守了lua开发规范
--- 其中 (---) 三个减 代表文档注释 (--) 两个减代表普通注释
--- 该项目请使用支持luajava库的修改器 在独猫的群里就有
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by 白.
--- DateTime: 2024/1/23 20:47
---


--- 要遍历文件夹
--- @param path string 要遍历的文件夹目录
--- @param fileList table 响应的文件夹结构数组
function traverseFolder(path, fileList)
    local File = luajava.bindClass("java.io.File")
    
    local index = 0
    local file = File(path)
    if not file:exists() and not file:isDirectory() then
        print "文件夹不存在"
        return
    end
    local files = file:listFiles()
    if not files then
        return
    end
    -- Arrays.sort(files)
    for i = 1, files.length do
        local v = files[i]
        if v:isDirectory() then
            index = index + 1
            fileList[index] = { path = v:getAbsolutePath() }
            traverseFolder(v:getAbsolutePath(), fileList[index])
        else
            index = index + 1
            fileList[index] = v:getName()
        end
    end
end

--- 要遍历的文件夹
--- @type string
Path = "/storage/emulated/0/白_Lua/"
FileList = {}

traverseFolder(Path, FileList)

print(FileList)

因为对于会java的人来说过于简单 而对于不懂的来说 说了也还是很懵所以直接放代码 不做解释

其中只有两个方法需要解释 一个是getAbsolutePath()他是用来获取文件的绝对路径的 还有一个的getName()这是用来获取文件名的 这两个方法都是File对象的非静态方法

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值