मैं निम्नलिखित कोड का उपयोग कर जावा में एक वाईएएमएल फ़ाइल पढ़ने की कोशिश कर रहा हूं:
public class LoadFile {
public static void main(String[] args) throws IOException {
Yaml yaml = new Yaml();
InputStream inputStream = LoadFile.class
.getClassLoader()
.getResourceAsStream("ABSOLUTE PATH TO YAML");
Object obj = yaml.load(inputStream);
System.out.println(obj);
}
}
लेकिन मुझे यह अपवाद मिलता है जो मुझे समझ में नहीं आता कि ऐसा क्यों होता है।
थ्रेड में अपवाद "मुख्य" org.yaml.snakeyaml.error.YAMLException: java.io.IOException: स्ट्रीम बंद
2 जवाब
यह स्पष्ट नहीं है कि समस्या का कारण क्या है लेकिन जांच करने के लिए कुछ चीजें हैं: 1- सुनिश्चित करें कि पथ सही है 2- सुनिश्चित करें कि फ़ाइल प्रारूप सही है
साइड नोट: बेहतर कास्टिंग के लिए आप ऑब्जेक्ट को Map<String,Object>
में बदल सकते हैं
आप एक ही स्ट्रीम को दो बार पढ़ रहे हैं। स्ट्रीम JavaDocs से
एक स्ट्रीम को केवल एक बार (एक मध्यवर्ती या टर्मिनल स्ट्रीम ऑपरेशन को लागू करते हुए) संचालित किया जाना चाहिए।
यहां
InputStream inputStream = LoadFile.class
.getClassLoader()
.getResourceAsStream("ABSOLUTE PATH TO YAML");
और यहाँ
Object obj = yaml.load(inputStream);
समस्या यह है कि inputStream
का पहले ही उपभोग किया जा चुका है, इसलिए yaml.load()
पर कॉल विफल होनी चाहिए और यहीं पर java.io.IOException: Stream closed
अपवाद फेंका जा रहा है।
समाधान: या तो अपनी स्ट्रीम की एक कॉपी बनाएं या एक बार पहले ही खपत (पढ़ें) के बाद दूसरी बार इसका सेवन न करें।
yaml.load(LoadFile.class .getClassLoader() .getResourceAsStream("ABSOLUTE PATH TO YAML");
try/catch
ब्लॉक में लपेटूंगा और IOException
अपवाद को विधि कॉल स्टैक को पास करने के बजाय संभालूंगा :)
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।