Java 使用缩短的路径创建临时文件夹并在尝试访问其中的文件时抛出 'Not found' 异常
Java creates temp folder with shortened path and throws 'Not found' exception when trying to access files placed in it
所以我 运行 解决了一个非常奇怪的问题。这个想法很简单:创建临时目录,在其中放置一些文件,然后尝试访问它们。现在的问题是调用 File.createTempDir()
或 Files.createTempDirectory(prefix)
在 AppData/Local/temp
中创建新文件并缩短路径,因此文件夹的完整路径看起来像 C:/Users/FirstNam~1/AppData/Local/Temp/myFolder/myFile.txt
而不是 C:/Users/FirstName LastName/AppData/Local/Temp/myFolder.myFile.txt
.
不同之处在于 java 中生成的路径包含 FirstNam~1
而不是 FistName SecondName
。 Java 然后抛出异常 File Not Found
.
当我尝试将缩短的路径复制并粘贴到文件资源管理器中时,我收到一条错误消息,指出该文件不存在,但如果我将缩短的路径更改为完整路径,则文件会打开并按预期工作。
有什么办法可以解决吗? Ether 通过强制 java 使用完整路径名或在 windows 中启用某些东西?我确实启用了 NTFS 长路径策略,但没有帮助。
在 VM 上使用 java 8/11 和 windows 10 运行ning 时会发生这种情况,项目正在使用 AGP 和 gradle。在 extends Plugin<Project>
的 groovy 文件中创建了临时文件
就在我失去希望并创建票证时,几个小时后我找到了答案。因此,java 有解决此 ~1
问题的方法 Path.toRealPath()
。使用此方法后路径不再包含缩短并正确解析。
编辑:看起来 java 所做的一切都是正确的,路径实际上是有效的,问题确实来自我正在使用的库,这是一个错误。
所以我 运行 解决了一个非常奇怪的问题。这个想法很简单:创建临时目录,在其中放置一些文件,然后尝试访问它们。现在的问题是调用 File.createTempDir()
或 Files.createTempDirectory(prefix)
在 AppData/Local/temp
中创建新文件并缩短路径,因此文件夹的完整路径看起来像 C:/Users/FirstNam~1/AppData/Local/Temp/myFolder/myFile.txt
而不是 C:/Users/FirstName LastName/AppData/Local/Temp/myFolder.myFile.txt
.
不同之处在于 java 中生成的路径包含 FirstNam~1
而不是 FistName SecondName
。 Java 然后抛出异常 File Not Found
.
当我尝试将缩短的路径复制并粘贴到文件资源管理器中时,我收到一条错误消息,指出该文件不存在,但如果我将缩短的路径更改为完整路径,则文件会打开并按预期工作。
有什么办法可以解决吗? Ether 通过强制 java 使用完整路径名或在 windows 中启用某些东西?我确实启用了 NTFS 长路径策略,但没有帮助。
在 VM 上使用 java 8/11 和 windows 10 运行ning 时会发生这种情况,项目正在使用 AGP 和 gradle。在 extends Plugin<Project>
就在我失去希望并创建票证时,几个小时后我找到了答案。因此,java 有解决此 ~1
问题的方法 Path.toRealPath()
。使用此方法后路径不再包含缩短并正确解析。
编辑:看起来 java 所做的一切都是正确的,路径实际上是有效的,问题确实来自我正在使用的库,这是一个错误。