JDK 在 Windows11 系统上运行创建`NUL:`文件报错,有哪位大佬知道是什么问题吗?

2022-06-29 11:16:58 +08:00
 ouyc

JDK 在 Windows11 系统上运行创建NUL:文件报错

在 Windows10 系统上运行正常

public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        FileOutputStream fos = new FileOutputStream("NUL:");

    }
}

Windows11 上的报错信息

Exception in thread "main" java.io.FileNotFoundException: Invalid file path
	at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:229)
	at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:123)
	at com.company.Main.main(Main.java:9)
1828 次点击
所在节点    Java
15 条回复
GuuJiang
2022-06-29 11:20:24 +08:00
NUL 、CON 、COM 、PRT 这些文件名在 win 上还是避免使用吧,一了百了
Damn
2022-06-29 11:24:41 +08:00
@GuuJiang 这些问题总能暴露年龄
ouyc
2022-06-29 11:29:43 +08:00
@GuuJiang
框架的代码,改不了 emm 。麻烦问下这几个特殊文件在 windows 上是用来干啥的
ouyc
2022-06-29 11:34:38 +08:00
换笔记本默认装 windows11 ,还有个台式 windows10 ,昨天项目一直在 windows11 上跑不起来,一直以为是 jdk 、ide 这些的问题,搞得我差点怀疑人生了。今天打断点追着报错看下去,才发现类在静态初始化块中创建了这个文件,然后创建失败报错了,导致 jvm 没加载到这个类。
pocketz
2022-06-29 11:38:46 +08:00
@ouyc
DOS 保留设备名包括:CON 作为输入用的文件名,指键盘 AUX 或 COM1 作为输出用的文件名,指屏幕 COM2 第一串行口 COM3 第二串行口 COM4 第三串行口 LPT1 或 PRN 第四串行 LPT1 第一并行口或者打印机 LPT2 第二并行口 LPT3 第三并行口 PRN 打印机 NUL 空设备

作者:ivy zheng
链接: https://www.zhihu.com/question/333457846/answer/739121201
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
pocketz
2022-06-29 11:39:56 +08:00
DOS 保留设备名包括:CON 作为输入用的文件名,指键盘
AUX 或 COM1 作为输出用的文件名,指屏幕
COM2 第一串行口
COM3 第二串行口
COM4 第三串行口
LPT1 或 PRN 第四串行
LPT1 第一并行口或者打印机
LPT2 第二并行口
LPT3 第三并行口
PRN 打印机
NUL 空设备

改了下格式
ouyc
2022-06-29 11:47:32 +08:00
找到官方文档对创建文件的描述
[命名文件、路径和命名空间]( https://docs.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN)
jptx
2022-06-29 11:48:45 +08:00
你是不是在用 Undertow 作为 web 容器时遇到了这个问题,本地开发启动时加 JVM 参数`-Djdk.io.File.enableADS=true`即可,部署到 Linux 上之后没有这个问题
hingbong
2022-06-29 16:12:26 +08:00
jdk8u332 出现的 bug 吧
@jptx
jptx
2022-06-29 18:44:43 +08:00
@hingbong jdk1.8 我没看,我是把 jdk11 升级了小版本后出现的,也没细研究是哪个小版本开始的,只发现了应该是这个 commit 加入的限制: https://github.com/openjdk/jdk/commit/395bb5b7f97f2549da89641257fe56712856b49d
hingbong
2022-06-29 21:09:19 +08:00
@jptx 我上次查了,这一批的 8 11 17 都有这个问题🤣
cppc
2022-06-30 09:56:40 +08:00
https://github.com/spring-projects/spring-boot/issues/31112

升级一下 xnio 的版本,3.8.7.Final 已经解决了。
cppc
2022-06-30 09:58:49 +08:00
@cppc 如果不是 xnio 的问题,也可参考解决方法。
skai0dev
2022-06-30 14:17:16 +08:00
twocold0451
2022-07-26 11:51:49 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX