https://stackoverflow.com/a/6184414/242042 के आधार पर यहां मैंने जो कार्यान्वयन लिखा है वह है जो पहली पंक्ति को स्ट्रिप्स करता है और चाबियाँ टाइप करता है।
public class CleanProperties extends Properties {
private static class StripFirstLineStream extends FilterOutputStream {
private boolean firstlineseen = false;
public StripFirstLineStream(final OutputStream out) {
super(out);
}
@Override
public void write(final int b) throws IOException {
if (firstlineseen) {
super.write(b);
} else if (b == '\n') {
firstlineseen = true;
}
}
}
private static final long serialVersionUID = 7567765340218227372L;
@Override
public synchronized Enumeration<Object> keys() {
return Collections.enumeration(new TreeSet<>(super.keySet()));
}
@Override
public void store(final OutputStream out, final String comments) throws IOException {
super.store(new StripFirstLineStream(out), null);
}
}
सफाई इस
final Properties props = new CleanProperties();
try (final Reader inStream = Files.newBufferedReader(file, Charset.forName("ISO-8859-1"))) {
props.load(inStream);
} catch (final MalformedInputException mie) {
throw new IOException("Malformed on " + file, mie);
}
if (props.isEmpty()) {
Files.delete(file);
return;
}
try (final OutputStream os = Files.newOutputStream(file)) {
props.store(os, "");
}
स्रोत
2016-08-19 16:34:41
तथ्य यह नहीं है कि 'स्ट्रिंग.hashCode() 'अच्छी तरह से परिभाषित और स्थिर है कि हैश तालिका में प्रविष्टियों का क्रम सुसंगत है? –
+1 - छोड़ा गया: अच्छा पकड़ो। इस समस्या को पहले और वास्तव में गुणों को "लाइनों का संग्रह" (एक सूची) में डाल दिया गया था, उन्हें वर्णानुक्रम में क्रमबद्ध किया गया और संग्रह को फ़ाइल में छोड़ दिया गया। –
@ कोनराड - गुणों (कुंजी) का एक ही सेट हमेशा एक ही क्रम में मुद्रित किया जाएगा, लेकिन यदि आप एक कुंजी जोड़ते हैं, तो गुण फ़ाइल को शफ़ल किया जा सकता है ... कम से कम कोई गारंटी नहीं है कि अन्य कुंजियां अपना ऑर्डर दें –