介绍
首先需要说明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对象的非静态方法