मेरे पास निम्न फ़ोल्डर संरचना है:

  • परियोजना
    • लेक्सर <उल>
    • mylexer (यह एक सी निष्पादन योग्य प्रोग्राम है)
  • पार्सर
    • MyJavaFile.java
  • पार्सर में जावा फ़ाइल से मैं mylexer प्रोग्राम निष्पादित करना चाहता हूं और परिणाम की प्रतीक्षा करना चाहता हूं। मेरे पास निम्न कोड है:

    public static String getTokensFromFile(String path) {
        String s = null;
        StringBuilder sb = new StringBuilder(path);
        try {
            Runtime rt = Runtime.getRuntime();
            String[] command = {"mylexer", "<", path, ">", "output.txt"};
            ProcessBuilder pb = new ProcessBuilder(command);
            pb.directory(new File("../Lexer"));
            Process pr = pb.start();
            BufferedReader stdInput = new BufferedReader(new
                 InputStreamReader(pr.getInputStream()));
    
            BufferedReader stdError = new BufferedReader(new
                 InputStreamReader(pr.getErrorStream()));
            while ((s = stdError.readLine()) != null) {
                sb.append(s+"\n");
            }
        }catch(Exception e) {
            System.out.println(e);
        }
        return (sb.toString().length() > 0)? sb.toString() : "";
    }
    

    मुझे कोई परिणाम नहीं मिला, प्रोग्राम कभी भी निष्पादन समाप्त नहीं करता है, और यदि मैं यह String[] command = {"./mylexer", "<", path, ">", "output.txt"}; करता हूं तो यह कहता है कि फ़ाइल नहीं मिली है। मैं उसे कैसे प्राप्त कर सकता हूं?

    इसके अलावा मैंने इसे अपने टर्मिनल पर किया

    ../Lexer/mylexer < /Users/jacobotapia/Documents/Compiladores/Proyecto/Lexer/sample.txt > output.txt 
    

    लेकिन यह जावा पर काम नहीं करता।

    0
    Jacobo 22 अप्रैल 2018, 03:42

    1 उत्तर

    सबसे बढ़िया उत्तर

    < और > का उपयोग करके इनपुट और आउटपुट पुनर्निर्देशन शेल (sh, bash, या जो भी आप उपयोग कर रहे हैं) द्वारा किया जाता है। वे इस सिंटैक्स के साथ प्रोसेसबिल्डर में उपलब्ध नहीं हैं, जब तक कि आप प्रोसेसबिल्डर से शेल का आह्वान नहीं करते।

    हालाँकि, प्रक्रिया के इनपुट और आउटपुट को पुनर्निर्देशित करने के लिए ProcessBuilder का अपना समर्थन है, जो कि redirectInput और redirectOutput विधियों का उपयोग करना शुरू करता है। निम्नलिखित आपके लिए काम करना चाहिए:

    String[] command = {"mylexer"};
    ProcessBuilder pb = new ProcessBuilder(command);
    pb.redirectInput(new File(path));
    pb.redirectOutput(new File("output.txt"));
    
    2
    Erwin Bolwidt 22 अप्रैल 2018, 03:57