2008-09-10 9 views
2

私はWindowsのマシンでJavaを使用してOfficeドキュメントやPDFなどを開くために次のコードを使用してきましたが、何らかの理由でファイル名が埋め込まれている場合を除いて正常に動作しています。 ] [SPACE] Test.doc "を参照してください。Javaから文書を開く方がいいですか?

どうすればこの作品を作成できますか?私はコード全体を缶詰にすることに嫌うことはありませんが、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);    
} 

編集:私は誤ったファイル・ウィンドウでそれを実行するとファイルを見つけることについて文句を言います。しかし...私はコマンドラインからコマンドラインを直接実行するとうまく動作します。

答えて

5

Java 6を使用している場合は、open method of java.awt.Desktopを使用して、現在のプラットフォームのデフォルトアプリケーションを使用してファイルを起動できます。

+0

魅力的な作品です。ありがとう。 –

0

これがあなたに多大な影響を与えるかどうかわかりません...私はjava 1.5 +のProcessBuilderを使用して、Javaプログラムで外部シェルスクリプトを起動します。基本的に私は次のことを行います(コマンド出力をキャプチャしたくないので、実際にはドキュメントを起動する必要がありますが、実際に使用することができます)。

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) {} 
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(); 
     } 
    } 
} 
+0

C:\\ so \\ My [space] [space] Doc.docが正しいことを確認するだけですか? –

関連する問題