Eri*_*ark 6 java eclipse-plugin
我用了
Files.createTempFile("Hello", "txt");
创建一个临时文件并存储返回的Path.
我有一个Eclipse IFile资源链接到我创建的临时文件:
linkedFile.createLink(tempFile.toUri(), IResource.NONE, null);
如果我想Path从这个资源中获得回报,我会打电话
linkedFile.getLocation().toFile().toPath()
在我的本地机器上,这可以100%正常工作.但是在远程测试机器上,我得到了两条不同的路径:
从 Files.createTempFile: C:\Users\USERNA~1\AppData\Local\Temp\Hello3606197456871226795txt
从 getLocation().toFile().toPath() C:\Users\Username_Testing\AppData\Local\Temp\Hello3606197456871226795txt
文件夹Username_Testing并且只有该文件夹变为短文件名,并且仅用于我作为临时文件直接创建它.
这两条路径不被视为相等Path.equals(...),这导致我在远程计算机上的测试失败.
一般来说,这使我有点紧张,Path.equals(...)即使在应用程序的实际实际操作中我还没有任何问题.有没有办法可以强制系统始终使用长文件名?当我进行路径相等检查或将路径从一种形式转换为另一种形式时,我是否应该注意到我缺少的东西?
更新#1:此特定问题是由目标Windows机器上的%TEMP%引起的,该机器使用短文件名返回路径,这在我的本地计算机上不会发生.只有测试代码会创建临时文件和文件夹,因此这不会影响实际应用程序.我当前问题的明显解决方案是修复%TEMP%,因此两个地方的测试运行良好,但这种解决方案在一般意义上是不可行的.如果有一种方法可以在不修改目标计算机或跳转到本机或特定于Windows的代码的情况下纠正这种情况,那将是很好的,因为我没有直接使用这样的代码来获取这两个路径.
我找到了一个很好的、可移植的解决方案来解决我的问题,不需要使用任何特定于平台的代码。答案其实很简单:
Path.toRealPath()
使用了这样的东西:
Path correctedTempFile = tempFile.toRealPath()
本质上,它现在正在使用该toRealPath()版本,幸运的是,该版本删除了短文件名,以便与从 Eclipse 资源获取的其他路径进行比较。我相信 Eclipse 实现仅使用长路径来保持一致性,因此我将使用它toRealPath来消除任何可能使用短文件名的潜在路径