java - 如何在文件路径中使用空格从java调用ghostscript
Posted
技术标签:
【中文标题】java - 如何在文件路径中使用空格从java调用ghostscript【英文标题】:How to call ghostscript from java with whitespaces in file paths 【发布时间】:2012-12-10 11:04:11 【问题描述】:最近,我发现自己必须在 linux 和 windows 环境中从 java 启动 ghostscript 命令,输入/输出文件名中有空格。命令示例如下:
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile=/home/nic/tomcat/6.0.33 with spaces/temp/Thread-11/img-%03d.png /home/nic/tomcat/6.0.33 with spaces/temp/tmpfile.tmp
gs 在 Windows 上被 gswin32 替换,因为 ghostscript 在路径中。
我很快意识到我必须以某种方式对文件名进行转义,所以我做的第一件事就是用双引号将它们括起来。这适用于 Windows,但不适用于 linux:在 linux 上,我尝试使用双引号括起来并用反斜杠转义空格,但没有成功。
为了启动我正在使用的命令Runtime.getRuntime().exec(command);
,传递一个字符串。我发现了以下问题getting ghostscript to take in files with spaces in their name (like something in "my documents") 但是:
我想彻底理解这件事:你能帮我做这件事吗?
根据 SO,以下是我的尝试总结。
窗口
用双引号括起来的文件名对我有用:
gswin32 -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="C:\Program Files\tomcat 6.0.33 with spaces\temp\Thread-11\img-%03d.png" "C:\Program Files\tomcat 6.0.33 with spaces\temp\tmpfile.tmp"
Linux
试图用双引号将文件名括起来
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="/home/nic/tomcat/6.0.33 with spaces/temp/Thread-11/img-%03d.png" "/home/nic/tomcat/6.0.33 with spaces/temp/tmpfile.tmp"
试图用反斜杠转义空格
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile=/home/nic/tomcat/6.0.33\ with\ spaces/temp/Thread-11/img-%03d.png /home/nic/tomcat/6.0.33\ with\ spaces/temp/tmpfile.tmp
两个都试了
gs -q -dNOPAUSE -dBATCH -sDEVICE=pnggray -r300 -sOutputFile="/home/nic/tomcat/6.0.33\ with\ spaces/temp/Thread-11/img-%03d.png" "/home/nic/tomcat/6.0.33\ with\ spaces/temp/tmpfile.tmp"
【问题讨论】:
【参考方案1】:为什么不使用带有多个参数的Runtime.exec(String[] args)?此变体旨在避免您不得不逃避此类论点。由于参数是单独提供的,因此不需要基于空间的插值,因此不会造成混淆。
【讨论】:
按照***.com/a/1804714/1504300 中的建议进行了尝试,但没有成功。我会再试一次 绝对有效,我给它一个错误的参数...对不起以上是关于java - 如何在文件路径中使用空格从java调用ghostscript的主要内容,如果未能解决你的问题,请参考以下文章
如何解决java调dll报Unable to load library的错误
如何解决java调dll报Unable to load library的错误