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

从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有什么理由要评估到错误的文件名?)     
已邀请:
您可以使用
getCanonicalPath()
来获得扩展路径。例如。:
try
{
  File file = File.createTempFile("abc", null);
  System.out.println(file.getPath());
  System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}
......生产......
C:DOCUME~1USERNA~1LOCALS~1Tempabc49634.tmp
C:Documents and SettingsusernameLocal SettingsTempabc49634.tmp
我在XP上对此进行了测试,但假设它在其他Windows操作系统上的工作方式类似。 请参阅@ raviaw对第二个问题的回答。     
哇,我从来没有见过。事实是环境变量%TEMP%返回一个受损的名称(这是来自我的计算机): TEMP = C: DOCUME〜1 raviw LOCALS〜1个温度 TMP = C: DOCUME〜1 raviw LOCALS〜1个温度 假设一个新创建的java VM使用环境变量来获取临时文件夹位置,那么目录将被破坏不是VM的错误。 即使您尝试使用System.getenv()来获取临时文件夹,您仍然会遇到同样的问题。 我会确保: 这个问题不是因为你有一个名为“prog.exe”的目录(基于你的问题,我假设这个); 如果文件是“prog.exe”,如果它没有被任何其他程序使用(可能是防病毒软件); 检查您的计算机是否理智(对于任何非Web应用程序且需要临时文件的应用程序,这将是一个非常严重的错误)。     

要回复问题请先登录注册