java中文件路径中的空格

时间:2012-08-30 06:46:43

标签: java space filepath

我有一个包含很少jar文件的文件夹。我指的是来自另一个jar文件的jar文件,这些文件位于其他位置。

我的问题是,当我给出像C:\Trial Library\jar Folder\这样的jar文件夹的路径时。如果文件夹名称中包含空格(试用库),则无法找到此文件夹。

如果我没有空间即C:\Trial_Library\jar_Folder\,那么它可以正常工作。

请尽快帮我解决这个问题。

这是我的批处理文件

set CURRENT_DIRECTORY=%~dp0

set ANT_HOME=%"CURRENT_DIRECTORY"%ant\apache-ant-1.8.3
ECHO current directory is %CURRENT_DIRECTORY%
ECHO %ANT_HOME%
set Path=%ANT_HOME%\bin
set ADAPTER_LIBRAY_PATH=%1
set USER_JAR_PATH=%2
set CLASS_NAME=%3
set RESULTS_PATH=%4
set JUNIT_PATH=%"CURRENT_DIRECTORY"%ANT\test\junit-4.1.jar
set LIBRAIES_TO_INCLUDE="%JUNIT_PATH%";"%ADAPTER_LIBRAY_PATH%";"%USER_JAR_PATH%"
ECHO %LIBRAIES_TO_INCLUDE%
ECHO %ADAPTER_LIBRAY_PATH%
ECHO %JUNIT_PATH%
ECHO %USER_JAR_PATH%
ECHO %CLASS_NAME%
ECHO %RESULTS_PATH% 

ant -lib "%LIBRAIES_TO_INCLUDE%" -Dlibraries="%ADAPTER_LIBRAY_PATH%" -Djunitlibrary="%JUNIT_PATH%" -Djartobeexec="%USER_JAR_PATH%" -Duserclass=%CLASS_NAME% -Dresultspath=%RESULTS_PATH% -buildfile build.xml test-html

这是我将值传递给我的批处理文件

的地方
String[] commands=new String[5];
commands[0]="driver.bat";
commands[1]=finalLibraryPath;
commands[2]=executingJarLocation;
commands[3]=tempPackageName;
commands[4]=resultsFolderPath;
process = Runtime.getRuntime().exec(commands); 
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuffer errorStr = new StringBuffer(); 
String line;
while ((line = br.readLine()) != null) {
errorStr.append(line);
errorStr.append(System.getProperty("line.separator"));  

}

提前完成

此致 帕布

3 个答案:

答案 0 :(得分:1)

好的,据我所知,我在“猜测”你正在做类似

的事情
Runtime.exec("myBatchFile.bat " + path);

这将以泪水结束。这相当于说:

C:> myBatchFile.bat C:\Path to my jar files

这不起作用。基本上,您的批处理文件现在认为它有5个参数而不是一个。

要解决此问题,您需要单独传递每个命令/参数...

Runtime.exec(new String[] {"mybatchFile.bat", path});

或者更好的是,使用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("myBatchFile.bar", path);

答案 1 :(得分:0)

用引号括起路径。这意味着计算机从字面上理解它。您可以在记事本中遇到类似的问题,即使您提供了扩展程序,它也会在末尾添加.txt扩展名。用引号括起来解决了这个问题。

答案 2 :(得分:-3)

通常用双引号括起路径("路径")适用于Unix,Linux等平台。 问题只出现在WIN平台上。这背后的原因是,只要WIN在要执行的文件的路径中看到空格,它就会恢复为8.3命名。在此命名中,它将Sub目录的前6个字符作为参数并搜索模式。 要解决此问题,您必须使用波浪号(〜)和表示该模式实例的数字附加前6个字符。

例如:

**原始路径:C:/ Program Files / Jdk1.6.0_07 / bin

要使用的路径:C:/Progra〜1 / Jdk1.6.0_07/bin **

我在很多Java应用程序中都使用了类似的方法,并且它一直都能正常工作。