FileHandler 创建给出 NoSuchFileException 导致缺少 .lck
FileHandler creation gives NoSuchFileException cause missing .lck
我现在搜索了 2 个小时来解决这个问题:
我正在尝试将 FileHandler
添加到 JAR 中的 Logger
。日志目录在外面。
在我的 IDE (NetBeans) 中这有效:
public static void addFileHandler(Logger logger) {
try {
Path p = Paths.get("logs", logger.getName().substring(logger.getName().lastIndexOf('.') + 1) + ".log");
FileHandler fh = new FileHandler(p.toString(), false);
fh.setFormatter(sf);
fh.setLevel(Level.ALL);
fh.setEncoding("UTF-8");
logger.addHandler(fh);
if (errorHandler != null) {
logger.addHandler(errorHandler);
}
if (allHandler != null) {
logger.addHandler(allHandler);
}
} catch (IOException | SecurityException ex) {
LOG.log(Level.SEVERE, getString("ERROR WHILE ADDING FILEHANDLER TO LOGGER") + " " + logger.getName(), ex);
return;
}
LOG.log(Level.INFO, getString("LOGGER {0} GOT ADDED HIS FILEHANDLERS SUCCESSFULLY") + "!", logger.getName());
}
但在我的 Jar 中,我一直为每个 Logger 获取此信息:
Juli 10, 2020 2:36:48 PM de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging addFileHandler
SEVERE: Fehler beim Hinzufügen vom FileHandler zum Logger de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting
java.nio.file.NoSuchFileException: logs\Formatting.log.lck
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newFileChannel(WindowsFileSystemProvider.java:120)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
at java.logging/java.util.logging.FileHandler.openFiles(FileHandler.java:511)
at java.logging/java.util.logging.FileHandler.<init>(FileHandler.java:341)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.addFileHandler(Logging.java:58)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting.<clinit>(Formatting.java:39)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.Constants.<clinit>(Constants.java:34)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.<clinit>(Logging.java:40)
at de.dhbw.mosbach.inf19b.programmieren2.game.main.StartJar.<clinit>(StartJar.java:21)
当然 .lck 不存在,现在会创建处理程序...
如果我使用 p.normalize().toAbsolutPath()
,同样的错误。我不能使用 Stream,因为它创建了一个 FileHandler...就像我发现的任何 Solution 中提到的...
为什么会这样?如何预防?
嗯...谢谢 VGR...
我刚刚在 FileHandler 初始化之前添加了这个。现在它每次都有效。我可能只是愚蠢,认为目录是在 FileHandler 之前创建的,而不是 IDE。
if (!Files.exists(p.getParent())) {
Files.createDirectory(p.getParent());
}
我现在搜索了 2 个小时来解决这个问题:
我正在尝试将 FileHandler
添加到 JAR 中的 Logger
。日志目录在外面。
在我的 IDE (NetBeans) 中这有效:
public static void addFileHandler(Logger logger) {
try {
Path p = Paths.get("logs", logger.getName().substring(logger.getName().lastIndexOf('.') + 1) + ".log");
FileHandler fh = new FileHandler(p.toString(), false);
fh.setFormatter(sf);
fh.setLevel(Level.ALL);
fh.setEncoding("UTF-8");
logger.addHandler(fh);
if (errorHandler != null) {
logger.addHandler(errorHandler);
}
if (allHandler != null) {
logger.addHandler(allHandler);
}
} catch (IOException | SecurityException ex) {
LOG.log(Level.SEVERE, getString("ERROR WHILE ADDING FILEHANDLER TO LOGGER") + " " + logger.getName(), ex);
return;
}
LOG.log(Level.INFO, getString("LOGGER {0} GOT ADDED HIS FILEHANDLERS SUCCESSFULLY") + "!", logger.getName());
}
但在我的 Jar 中,我一直为每个 Logger 获取此信息:
Juli 10, 2020 2:36:48 PM de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging addFileHandler
SEVERE: Fehler beim Hinzufügen vom FileHandler zum Logger de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting
java.nio.file.NoSuchFileException: logs\Formatting.log.lck
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:85)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
at java.base/sun.nio.fs.WindowsFileSystemProvider.newFileChannel(WindowsFileSystemProvider.java:120)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:292)
at java.base/java.nio.channels.FileChannel.open(FileChannel.java:345)
at java.logging/java.util.logging.FileHandler.openFiles(FileHandler.java:511)
at java.logging/java.util.logging.FileHandler.<init>(FileHandler.java:341)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.addFileHandler(Logging.java:58)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Formatting.<clinit>(Formatting.java:39)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.Constants.<clinit>(Constants.java:34)
at de.dhbw.mosbach.inf19b.programmieren2.game.utilities.logging.Logging.<clinit>(Logging.java:40)
at de.dhbw.mosbach.inf19b.programmieren2.game.main.StartJar.<clinit>(StartJar.java:21)
当然 .lck 不存在,现在会创建处理程序...
如果我使用 p.normalize().toAbsolutPath()
,同样的错误。我不能使用 Stream,因为它创建了一个 FileHandler...就像我发现的任何 Solution 中提到的...
为什么会这样?如何预防?
嗯...谢谢 VGR...
我刚刚在 FileHandler 初始化之前添加了这个。现在它每次都有效。我可能只是愚蠢,认为目录是在 FileHandler 之前创建的,而不是 IDE。
if (!Files.exists(p.getParent())) {
Files.createDirectory(p.getParent());
}