如何在Java中解开Windows文件名?
-
22-09-2019 - |
题
从Java中,我将可执行文件提取到使用file.createTemPfile()指定的位置中。当我尝试运行可执行文件时,我的程序试图读取第一行输出时会悬挂。
我发现,如果我尝试从另一个程序中运行相同的提取的可执行文件,则如果将目录指定为c: documents and settings username local Settings temp prog.exe,则可以工作。但是,如果我将目录指定为c: docume〜1 userna〜1 当地人〜1 temp prog.exe,我会挂起。
有没有办法在程序中解开tilde文件名,以便我可以指定可以使用的目录名称?
(而且,由于我一直喜欢解决语言和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~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\Temp TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
假设新创建的Java VM使用环境变量来获取临时文件夹位置,目录被弄坏并不是VM的错误。
即使您尝试使用 system.getEnv() 要获取临时文件夹,您仍然会有相同的问题。
我会确保:
- 问题并不是由于您的目录称为“ prog.exe”(根据您的问题,我假设这个)引起的;
- 如果文件为“ prog.exe”,如果其他程序不使用该文件(也许是防病毒软件);
- 检查您的计算机是否理智(对于任何不是Web应用程序和需要临时文件的应用程序而言,这将是一个非常重要的错误)。
不隶属于 StackOverflow