इस कोड का उपयोग करता है "कहाँ" विंडोज पर आदेश, और "जो" अन्य सिस्टम पर कमांड, अगर सिस्टम पथ में वांछित कार्यक्रम के बारे में जानता है की जाँच करने के। यदि पाया जाता है, तो फ़ंक्शन प्रोग्राम में java.nio.file.Path देता है, और अन्यथा शून्य।
मैं विंडोज 7 और लिनक्स टकसाल 17.3 पर जावा 8 के साथ यह परीक्षण किया गया।
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.logging.Logger;
public class SimulationUtils
{
private final static Logger LOGGER = Logger.getLogger(SimulationUtils.class.getName());
public static Path lookForProgramInPath(String desiredProgram) {
ProcessBuilder pb = new ProcessBuilder(isWindows() ? "where" : "which", desiredProgram);
Path foundProgram = null;
try {
Process proc = pb.start();
int errCode = proc.waitFor();
if (errCode == 0) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
foundProgram = Paths.get(reader.readLine());
}
LOGGER.info(desiredProgram + " has been found at : " + foundProgram);
} else {
LOGGER.warning(desiredProgram + " not in PATH");
}
} catch (IOException | InterruptedException ex) {
LOGGER.warning("Something went wrong while searching for " + desiredProgram);
}
return foundProgram;
}
private static boolean isWindows() {
return System.getProperty("os.name").toLowerCase().contains("windows");
}
}
इसका इस्तेमाल करने के लिए:
System.out.println(SimulationUtils.lookForProgramInPath("notepad"));
मेरी विंडोज 7 प्रणाली पर, यह प्रदर्शित करता है:
C: \ Windows \ System32 \ notepad.exe
और लिनक्स पर:
System.out.println(SimulationUtils.lookForProgramInPath("psql"));
/usr/bin/psql
इस विधि का लाभ यह है कि यह किसी भी मंच पर काम करना चाहिए और पथ वातावरण चर पार्स या रजिस्ट्री को देखने के लिए कोई आवश्यकता नहीं है है। वांछित कार्यक्रम कभी नहीं कहा जाता है, भले ही पाया जाता है। अंत में, प्रोग्राम एक्सटेंशन को जानने की आवश्यकता नहीं है। विंडोज और लिनक्स के तहत gnuplot के तहत gnuplot.exe दोनों एक ही कोड के द्वारा पाया जा होगा: सुधार के लिए
SimulationUtils.lookForProgramInPath("gnuplot")
सुझावों का स्वागत है!
स्रोत
2016-06-28 10:43:05
मुझे लगता है कि यह बेहतर होगा करने के लिए के बजाय "SVN मदद" "जो svn":
यहाँ सहायक हैं। यह अभी भी उचित वापसी कोड देगा कि क्या पथ में svn मौजूद है या नहीं, लेकिन सफलता पर आपको svn निष्पादन योग्य के लिए पूर्ण-पथ भी मिल जाएगा। – Apreche
"कौन" विंडोज कमांड नहीं है। – EMMERICH
"कहां" विंडोज़ समतुल्य है "कौन" –