使用 Lua 执行 Java 时创建临时文件的问题

我在通过 Lua 执行 Java 时创建临时文件遇到了问题。 如果我通过命令行启动 java 程序,代码可以工作,但是如果程序由 Lua 插件启动,则不会创建文件。

情况

命令行> java Bot !info

  • 如果该文件已经存在,则 BotAnswer.txt 将被创建在 Temp 目录中,如果文件已经存在,则会被覆盖
  • 该文件包含正确的数据

通过 Lua 执行

  • 错误:Java 程序将启动,但 BotAnswer.txt 不会被创建...如果文件已经存在,则什么也不会发生

  • 该文件丢失或包含错误的数据

  • 如果文件已经存在,则将向聊天发送旧的和错误的内容

我猜测可能存在一些权限错误或类似的问题。

如果您能告诉我如何解决这个问题,将是一个巨大的帮助。


以下是代码片段:

位于 C:\Program Files\TeamSpeak 3 Client\plugins\lua_plugin\testmodule 中

Lua

if targetMode == 2 then --对于这种情况,targetMode 始终为 2
            os.execute("java Bot "  .. message) --使用消息作为参数启动 java 程序(消息为 !info)
            if message == "!info" then
                folderName = os.getenv("TEMP")
                fileName = "BotAnswer.txt"
                filePath = io.open(folderName .. "/" .. fileName, "r")
                answer = filePath:read("*all")
                filePath:close()
                os.remove(folderName .. "/" .. fileName)
                ts3.requestSendChannelTextMsg(serverConnectionHandlerID, answer, fromID) --将 BotAnswer.txt 的内容发送到 TeamSpeak 聊天中
            end
        end

Java

public class Bot {

    public static void main(String[] args) {
        Bot myBot = new Bot();
        String command = myBot.getCommand(args);
        String answer = myBot.differentiateCommand(command);
        try {
            myProcessor.writeAnswerToFile(answer);
        } catch (Exception e) {}
    }

    public String getCommand(String[] args) {
        if(args.length == 0) {
            System.exit(0);
        }
        if (args[0].startsWith("!") != true) {
            System.exit(0);
        }
        String message = args[0];
        if (message.startsWith("!")) {
            String[] msgArray = message.split("!");
            message = msgArray[1];
        }
        return  message;
    }

    public String differentiateCommand(String command) {
        String answer = "";
        if (command.startsWith("info")) {
            answer = "这应该是 Teamspeak 的答案";
        }
    }

    public void writeAnswerToFile(String answer)throws IOException {
        String tempDir = System.getenv("TEMP");
        File tempFile = new File(tempDir + "/" + "BotAnswer.txt");
        tempFile.createNewFile();
        FileWriter writer = new FileWriter(tempFile);
        writer.write(answer);
        writer.flush();
        writer.close();
    }

}
点赞