我一直在使用以下代码在我的Windows机器上使用Java打开Office文档,PDF等,并且它工作正常,除了某些原因,当文件名已将其嵌入其中的多个连续空格,如“文件[ SPACE] [SPACE] Test.doc的”。
我该如何使这项工作?我并不反对整理代码...但我宁愿不用称为JNI的第三方库替换它。
public static void openDocument(String path) throws IOException {
// Make forward slashes backslashes (for windows)
// Double quote any path segments with spaces in them
path = path.replace("/", "\\").replaceAll(
"\\\\([^\\\\\\\\\"]* [^\\\\\\\\\"]*)", "\\\\\\\"$1\"");
String command = "C:\\Windows\\System32\\cmd.exe /c start " + path + "";
Runtime.getRuntime().exec(command);
}
编辑:当我使用错误的文件窗口运行它时,会抱怨找到该文件。但是......当我直接从命令行运行命令行时,它运行得很好。
答案 0 :(得分:5)
如果您使用的是Java 6,则只需使用open method of java.awt.Desktop即可使用当前平台的默认应用程序启动该文件。
答案 1 :(得分:0)
不确定这对你有多大帮助......我使用java 1.5 +的ProcessBuilder在java程序中启动外部shell脚本。基本上我做了以下几点:(虽然这可能不适用,因为你不想捕获命令输出;你实际上想要启动文档 - 但是,这可能会引发你可以使用的东西)
List<String> command = new ArrayList<String>();
command.add(someExecutable);
command.add(someArguemnt0);
command.add(someArgument1);
command.add(someArgument2);
ProcessBuilder builder = new ProcessBuilder(command);
try {
final Process process = builder.start();
...
} catch (IOException ioe) {}
答案 2 :(得分:0)
问题可能是您正在使用的“启动”命令,而不是您的文件名解析。例如,这似乎在我的WinXP机器上运行良好(使用JDK 1.5)
import java.io.IOException;
import java.io.File;
public class test {
public static void openDocument(String path) throws IOException {
path = "\"" + path + "\"";
File f = new File( path );
String command = "C:\\Windows\\System32\\cmd.exe /c " + f.getPath() + "";
Runtime.getRuntime().exec(command);
}
public static void main( String[] argv ) {
test thisApp = new test();
try {
thisApp.openDocument( "c:\\so\\My Doc.doc");
}
catch( IOException e ) {
e.printStackTrace();
}
}
}