【问题标题】:Why doesn't Java create a file with the system time in it's filename? [closed]为什么 Java 不创建文件名中包含系统时间的文件? [关闭]
【发布时间】:2022-12-21 03:15:36
【问题描述】:

我正在为我的 Minecraft 服务器开发 Bukkit/Spigot 插件。该命令应该创建一个文件,其中包含系统时间以及玩家为参数输入的任何内容。由于某种原因,它不起作用。它与文件名中的内容有关。

打印出networkfolder + File.separator + filename给我C:\Users\Anston Sorensen\Desktop\Minecraft Servers\Sun Apr 24 20:40:41 CDT 2022-D.txt。会发生什么?

我的命令类:


    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

        if (sender instanceof Player) {
            Player player = (Player) sender;

            if (args.length == 0) {
                player.sendMessage(ChatColor.RED + "You need to enter some arguments");
                player.sendMessage(ChatColor.YELLOW + "To save the server network to the GitHub website: /saveserver <what you built/did(TYPE _ FOR SPACES)>");
            } else if (args.length == 1) {
                File curdir = new File(System.getProperty("user.dir"));
                Path parentfolder = curdir.toPath().getParent().getParent();
                String networkfolder = parentfolder + File.separator + "Minecraft Servers";
                Date date = new Date();
                String filename = date + "-" + args[0].toUpperCase().replace("_", " ") + ".txt";

                File txt = new File(networkfolder + File.separator + filename);
                try {
                    txt.createNewFile();
                } catch (IOException e) {
                    player.sendMessage("Unable to create file.");
                }
            } else {
                player.sendMessage(ChatColor.RED + "Too many arguments");
                player.sendMessage(ChatColor.YELLOW + "To save the server network to the GitHub website: /saveserver <what you built/did(TYPE _ FOR SPACES)>");
            }
        }
        return true;
    }
}

它给了我这个错误:

[15:18:44 WARN]: java.io.IOException: The filename, directory name, or volume label syntax is incorrect
[15:18:44 WARN]:        at java.base/java.io.WinNTFileSystem.createFileExclusively(Native Method)
[15:18:44 WARN]:        at java.base/java.io.File.createNewFile(File.java:1043)
[15:18:44 WARN]:        at CrucialPlugin-1.0.jar//me.acclashcorporation.crucialplugin.commands.TestCrap.onCommand(TestCrap.java:36)
[15:18:44 WARN]:        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45)
[15:18:44 WARN]:        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159)
[15:18:44 WARN]:        at org.bukkit.craftbukkit.v1_18_R2.CraftServer.dispatchCommand(CraftServer.java:906)
[15:18:44 WARN]:        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2306)
[15:18:44 WARN]:        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2117)
[15:18:44 WARN]:        at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:2098)
[15:18:44 WARN]:        at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:46)
[15:18:44 WARN]:        at net.minecraft.network.protocol.game.PacketPlayInChat.a(PacketPlayInChat.java:6)
[15:18:44 WARN]:        at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$ensureRunningOnSameThread$1(PlayerConnectionUtils.java:51)
[15:18:44 WARN]:        at net.minecraft.server.TickTask.run(TickTask.java:18)
[15:18:44 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.d(IAsyncTaskHandler.java:153)
[15:18:44 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.d(IAsyncTaskHandlerReentrant.java:24)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1399)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.d(MinecraftServer.java:188)
[15:18:44 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.y(IAsyncTaskHandler.java:126)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.be(MinecraftServer.java:1376)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1369)
[15:18:44 WARN]:        at net.minecraft.util.thread.IAsyncTaskHandler.c(IAsyncTaskHandler.java:136)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1347)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1229)
[15:18:44 WARN]:        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:315)
[15:18:44 WARN]:        at java.base/java.lang.Thread.run(Thread.java:833)

【问题讨论】:

  • 在创建文件之前打印出字符串networkfolder + File.separator + filename。它里面有什么?
  • 在调用 createNewFile() 之前,使用调试器查看 txt。那里可能有一些意想不到的字符,例如连续的两个斜杠或类似的字符。
  • @stdunbar 它给了我这个:C:\Users\Anston Sorensen\Desktop\Minecraft Servers\Sun Apr 24 20:40:41 CDT 2022-D.txt
  • @DawoodibnKareem 没有
  • 这不是有效的 Windows 文件名@ThrownRedstone。有关详细信息,请参阅this link,但多余的冒号字符会破坏它。

标签: java minecraft bukkit spigot


【解决方案1】:

正如错误消息所说,文件名语法不正确。

C:UsersAnston SorensenDesktopMinecraft ServersSun Apr 24 20:40:41 CDT 2022-D.txt

不能在 Windows 文件名中使用冒号,驱动器号后除外。您需要重新考虑您的名称生成策略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2021-03-30
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多