उल्लेख है कि यह केवल में जाँच की है, Windows
लेकिन मुझे लगता है कि यह अन्य ऑपरेटिंग सिस्टम [ Linux,MacOs,Solaris
] :) पर सही काम करता है ।
मेरे पास एक ही डायरेक्टरी में 2 .jar
फाइलें थीं । मैं एक .jar
फ़ाइल से दूसरे को शुरू करना चाहता था.jar
फ़ाइल जो उसी निर्देशिका में है।
समस्या यह है कि जब आप इसे cmd
चालू निर्देशिका से शुरू करते हैं system32
।
चेतावनी!
- नीचे सभी परीक्षण में बहुत अच्छी तरह से काम करने लगता है मैंने फ़ोल्डर नाम के साथ भी किया है
;][[;'57f2g34g87-8+9-09!2#@!$%^^&()
या()%&$%^@#
यह अच्छी तरह से काम करता है।
- मैं
ProcessBuilder
निम्नलिखित के साथ नीचे का उपयोग कर रहा हूं :
🍂 ..
//The class from which i called this was the class `Main`
String path = getBasePathForClass(Main.class);
String applicationPath= new File(path + "application.jar").getAbsolutePath();
System.out.println("Directory Path is : "+applicationPath);
//Your know try catch here
//Mention that sometimes it doesn't work for example with folder `;][[;'57f2g34g87-8+9-09!2#@!$%^^&()`
ProcessBuilder builder = new ProcessBuilder("java", "-jar", applicationPath);
builder.redirectErrorStream(true);
Process process = builder.start();
//...code
🍂 getBasePathForClass(Class<?> classs)
:
/**
* Returns the absolute path of the current directory in which the given
* class
* file is.
*
* @param classs
* @return The absolute path of the current directory in which the class
* file is.
* @author GOXR3PLUS[StackOverFlow user] + bachden [StackOverFlow user]
*/
public static final String getBasePathForClass(Class<?> classs) {
// Local variables
File file;
String basePath = "";
boolean failed = false;
// Let's give a first try
try {
file = new File(classs.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) {
basePath = file.getParent();
} else {
basePath = file.getPath();
}
} catch (URISyntaxException ex) {
failed = true;
Logger.getLogger(classs.getName()).log(Level.WARNING,
"Cannot firgue out base path for class with way (1): ", ex);
}
// The above failed?
if (failed) {
try {
file = new File(classs.getClassLoader().getResource("").toURI().getPath());
basePath = file.getAbsolutePath();
// the below is for testing purposes...
// starts with File.separator?
// String l = local.replaceFirst("[" + File.separator +
// "/\\\\]", "")
} catch (URISyntaxException ex) {
Logger.getLogger(classs.getName()).log(Level.WARNING,
"Cannot firgue out base path for class with way (2): ", ex);
}
}
// fix to run inside eclipse
if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin")
|| basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) {
basePath = basePath.substring(0, basePath.length() - 4);
}
// fix to run inside netbeans
if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
basePath = basePath.substring(0, basePath.length() - 14);
}
// end fix
if (!basePath.endsWith(File.separator)) {
basePath = basePath + File.separator;
}
return basePath;
}
cd
अपने कमांड-प्रॉम्प्ट पर कमांड निष्पादित करते हैं तो क्या आप इसे यहां देख सकते हैं ?