आप कमांड निष्पादित और err
उत्पादन है, जो एक सार्थक संदेश है ले सकता है।
public static void main(String[] args) throws Exception {
System.out.println(getErrorMessage("cp fake.file x"));
System.out.println(getErrorMessage("cp /tmp /tmp"));
System.out.println(getErrorMessage("mkdir /Volumes"));
System.out.println(getErrorMessage("mv /tmp /"));
System.out.println(getErrorMessage("mv fake.file /tmp"));
}
:
import org.apache.commons.exec.*;
public static String getErrorMessage(String command) {
CommandLine cmdLine = CommandLine.parse(command);
DefaultExecutor executor = new DefaultExecutor();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayOutputStream err = new ByteArrayOutputStream();
executor.setStreamHandler(new PumpStreamHandler(out, err));
try {
executor.execute(cmdLine);
} catch (Exception e) {
return err.toString().trim();
}
return null; // no error occurred
}
यहाँ फ़ाइल आपरेशन त्रुटि स्थिति की एक किस्म दिखा इस कोड का एक परीक्षण है:
यहाँ कुछ न्यूनतम निष्पादन योग्य कोड (जो apache commons-exec उपयोग करता है) यह दर्शाता है कि यह कैसे काम कर सकता है आउटपुट (मैक ओएसएक्स पर चलाएं):
cp: fake.file: No such file or directory
cp: /tmp is a directory (not copied).
mkdir: /Volumes: File exists
mv: /tmp and /tmp are identical
mv: rename fake.file to /tmp/fake.file: No such file or directory
आप कर सकते थे
if (message.endsWith("No such file or directory"))
throw new FileNotFoundException(); // Use IOExceptions if you can
if (message.endsWith("are identical"))
throw new IdenticalFileException(); // Create your own Exceptions that extend IOException
आप हैं: एक विधि है कि IOException फेंकता है कि, संदेश मिला है, रेगुलर एक्सप्रेशन मिलान या विशेष IOExceptions को contains
का उपयोग कर कुंजी मापदंडों और नक्शा संदेशों के लिए यह पार्स और उन्हें फेंक सकता है, जैसे में उपरोक्त विधि लपेट कई ओएस स्वादों पर उपयोग के लिए इसे सार करना चाहता था, आपको प्रत्येक प्लेटफ़ॉर्म के लिए कोड लागू करना होगा (विंडोज़ और * निक्स किसी भी दिए गए फ़ाइल ऑपरेशन/परिणाम के लिए अलग-अलग खोल कमांड/त्रुटि संदेश का उपयोग करें)।
यदि इस उत्तर में बक्षीस दिया जाता है, तो मैं एक पूर्ण साफ, कार्य कोड के संस्करण को पोस्ट करूंगा, जिसमें स्टाइलिश enum
फ़ाइल संचालन के लिए होगा।
मुझे नहीं पता। लेकिन यह देखने के लिए कि निर्देशिका बनाने की प्रक्रिया में किस प्रकार के अपवाद फेंक दिए जाएंगे और इसलिए, यह असफल क्यों होगा, मैं स्रोत कोड की जांच करने की सिफारिश करता हूं। – Moonbeam
@ मूनबीन: मुद्दा यह है कि उन मामलों के लिए अपवाद नहीं फेंक दिया गया है जो निर्देशिका के रूप में पहले से मौजूद हैं। –