如何在Java中解组Windows文件名?

ski*_*ppy 6 java windows filenames name-mangling long-filenames

从Java,我将可执行文件提取到使用File.createTempFile()指定的位置.当我尝试运行我的可执行文件时,我的程序在尝试读取第一行输出时挂起.

我发现如果我尝试从另一个程序运行相同的提取可执行文件,如果我将目录指定为C:\ Documents and Settings\username\Local Settings\Temp\prog.exe,它就可以工作.但是,如果我将目录指定为C:\ DOCUME~1\USERNA~1\LOCALS~1\Temp\prog.exe,我就会挂起.

有没有办法解开我的程序中的波浪号文件名,以便我可以指定一个可以工作的目录名?

(因为我总是喜欢解决语言和API设计问题,Java File.createTempFile()和java.io.tmpdir有没有必要评估错误的文件名?)

Chr*_*ris 10

您可以使用getCanonicalPath()获取扩展的路径.例如:

try
{
  File file = File.createTempFile("abc", null);
  System.out.println(file.getPath());
  System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}
Run Code Online (Sandbox Code Playgroud)

......生产......

C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp
C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp
Run Code Online (Sandbox Code Playgroud)

我在XP上测试了这个,但是假设它在其他Windows操作系统上的工作方式类似.

请参阅@ raviaw对第二个问题的回答.