从Java中,我将一个可执行文件解压到使用File.createTempFile()指定的位置。 当我尝试运行我的可执行文件时,我的程序在尝试读取第一行输出时挂起。
我发现,如果我尝试从另一个程序运行相同的解压缩的可执行文件,它将工作,如果我指定目录为C:\ Documents和Settings \用户名\ Local Settings \ Temp \ prog.exe。 但是,如果我指定目录为C:\ DOCUME〜1 \ USERNA〜1 \ LOCALS〜1 \ Temp \ prog.exe我得到挂起。
有没有办法在我的程序unmangle代字号文件名,所以我可以指定一个目录名称,将工作?
(因为我总是喜欢解决语言和APIdevise问题,所以为什么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~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp
我在XP上测试了这个,但是假设它在其他的Windows操作系统上也是一样的。
请参阅@ raviaw对第二个问题的回答。
哇,我从来没有见过。 事实是,环境变量%TEMP%返回一个错位的名字(这是从我的电脑):
TEMP = C:\ DOCUME〜1 \ raviw \ LOCALS〜1个\温度 TMP = C:\ DOCUME〜1 \ raviw \ LOCALS〜1个\温度
假设一个新创建的Java虚拟机使用环境变量来获取临时文件夹的位置,这不是虚拟机的错误,目录即将被损坏。
即使您尝试使用System.getenv()来获取临时文件夹,您仍然会遇到同样的问题。
我会确保: