我一直在使用下面的代码来打开我的windows计算机上使用Java的Office文档,pdf等,它的工作正常,除了某些原因,当一个文件名已经embedded它的多个连续的空间,如“文件[空间] [ SPACE] Test.doc的”。
我怎样才能做这个工作? 我并不反对整段代码…但是我宁愿不把它replace成调用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); }
编辑:当我运行与错误的文件窗口抱怨find该文件。 但是…当我直接从命令行运行命令行,它运行得很好。
如何在Java 9中获得Processline和Process的参数
Java运行时进程不会“grep”
使用Fortran求解器在windows 64位上安装Odespy
万无一失的跨平台进程kill守护进程
在linux中顺序分配进程ID?
windows上的Java 8 64位,符合FIPS 140标准的NSS
PHP-FPM – 杀死所有属于PHP-fpm的linux进程 – 一个命令行
如何使meteor在windows 10上的64位mongodb上工作?
在64位进程(特别是Flash)中托pipe32位OCX
windows,多进程vsmultithreading
如果您正在使用Java 6,则可以使用java.awt.Desktop的open方法使用当前平台的默认应用程序启动该文件。
不知道这是否会帮助你很多…我使用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) {}
问题可能是您正在使用的“开始”命令,而不是您的文件名解析。 例如,这似乎在我的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(); } } }
总结以上是内存溢出为你收集整理的从Java打开文档的更好方法?全部内容,希望文章能够帮你解决从Java打开文档的更好方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)