从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应用程序和需要临时文件的应用程序而言,这将是一个非常重要的错误)。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top