Java-Snippets

Eine Snippet-Sammlung für Java.

Links:

Thread-Dump ausgeben

Read/Write-Lock

import java.util.concurrent.locks.ReentrantReadWriteLock;
class MyClass {
  private ReentrantReadWriteLock lock;

  public MyClass() {
    lock = new ReentrantReadWriteLock();
  }

  public read() {
    lock.readLock().lock();
    try {
      // Do read operation
    } finally {
      lock.readLock().unlock();
    }
  }

  public write() {
    lock.writeLock().lock();
    try {
      // Do write operation
    } finally {
      lock.writeLock().unlock();
    }
  }

  public readWithUpgrade() {
    lock.readLock().lock();
    try {
      // Do read operation

      if (needWriteLock) {
        // Change to write lock
        lock.readLock().unlock();
        lock.writeLock().lock();
        try {
          // Do write operation
        } finally {
          // Down-grade lock
          lock.readLock().lock();
          lock.writeLock().unlock();
        }
      }

      // Do read operation
    } finally {
      lock.readLock().unlock();
    }
  }
}

XML lesen/schreiben

XML lesen:

import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.OutputFormat;

class MyClass {
  @SuppressWarnings("rawtypes")
  private void readXml() {
    // Load XML file
    File xmlFile = new File(...);
    Element rootElem = new SAXReader().read(syncXmlFile).getRootElement();

    // Read XML file
    Iterator someChildIter = rootElem.elementIterator("someChild");
    while (someChildIter.hasNext()) {
      Element someChildElem = (Element) someChildIter.next();

      String myAttr = someChildElem.attributeValue("myAttr");
    }
  }
}

XML schreiben:

import org.apache.commons.io.IOUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

class MyClass {
  private void writeXml() {
    String encoding = "utf-8";

    Document doc = DocumentFactory.getInstance().createDocument();
    doc.setXMLEncoding(encoding);

    Element rootElem = doc.addElement("myroot");
    doc.setRootElement(rootElem);

    // Fill DOM
    ...

    // Write XML file
    File xmlFile = new File(...);
    boolean prettyPrint = true;

    OutputStream stream = null;
    Writer writer = null;
    try {
      stream = new FileOutputStream(xmlFile);
      writer = new OutputStreamWriter(stream, encoding);

      XMLWriter xmlWriter;
      if (prettyPrint) {
        xmlWriter = new XMLWriter(writer, OutputFormat.createPrettyPrint());
      } else {
        xmlWriter = new XMLWriter(writer);
      }

      xmlWriter.write(doc);
    } finally {
      IOUtils.closeQuietly(writer);
      IOUtils.closeQuietly(stream);
    }
  }
}