سؤال

لقد تم استخدام التعليمات البرمجية التالية إلى فتح مستندات Office, PDF, etc.على أجهزة ويندوز باستخدام جافا وانها تعمل بشكل جيد عدا بعض السبب عندما يكون الملف قد المضمنة في غضون ذلك متعددة متجاورة المساحات مثل "ملف[الفضاء][الفضاء]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);            
}

تحرير: عند تشغيلها مع المخطئين ملف ويندوز يشكو العثور على الملف.ولكن...عند تشغيل سطر الأوامر مباشرة من سطر الأوامر فإنه يعمل على ما يرام.

هل كانت مفيدة؟

المحلول

إذا كنت تستخدم جافا 6 يمكنك فقط استخدام طريقة فتح جافا.awt.سطح المكتب لإطلاق الملف باستخدام التطبيق الافتراضي على النظام الأساسي الحالي.

نصائح أخرى

لست متأكدا إذا كان هذا سوف تساعدك كثيرا...يمكنني استخدام جافا 1.5+'s 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) {}

مسألة قد تكون "بداية" الأمر كنت تستخدم بدلا من اسم الملف الخاص بك تحليل.على سبيل المثال ، يبدو أن تعمل بشكل جيد على ويندوز إكس بي الجهاز (باستخدام 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();
        }
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top