Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

कोई कैसे पता लगाता है कि DBF फ़ाइल या कोई फ़ाइल कैसे स्वरूपित होती है?

मुझे भी इसी तरह की समस्या थी और मैंने इसे इसी तरह से किया।

TL;DR:आपको अपाचे टीका का उपयोग करना होगा DBase फ़ाइलों को पार्स करने के लिए। यह सामग्री को एक XHTML तालिका में परिवर्तित करता है और इसे java.lang.String . के रूप में लौटाता है , जिसे आप आवश्यक प्रारूप में डेटा प्राप्त करने के लिए किसी DOM या SAX पार्सर के माध्यम से पार्स कर सकते हैं। यहां कुछ उदाहरण दिए गए हैं:https://tika.apache.org/1.20/examples.html

शुरू करने के लिए, अपने पीओएम में निम्नलिखित मावेन निर्भरता जोड़ें:

<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-parsers</artifactId>
  <version>1.21</version>
</dependency>

फिर पार्सर को इनिशियलाइज़ करें:

Parser parser =  new DBFParser(); //Alternatively, you can use AutoDetectParser
ContentHandler handler = new BodyContentHandler(new ToXMLContentHandler()); //This is tells the parser to produce an XHTML as an output.
parser.parse(dbaseInputStream, handler, new Metadata(), new ParseContext()); // Here, dbaseInputStream is a FileInputStream object for the DBase file.
String dbaseAsXhtml = handler.toString(); //This will have the content in XHTML format

अब, डेटा को अधिक सुविधाजनक प्रारूप में बदलने के लिए (इस मामले में सीएसवी), मैंने निम्नलिखित किया:

सबसे पहले, पूरे स्ट्रिंग को DOM ऑब्जेक्ट में बदलें:

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document xhtmlDoc= builder.parse(new InputSource(new StringReader(xmlString.trim().replaceAll("\t", "")))); //I'm trimming out the tabs and whitespaces here, so that I don't have to dealt with them later

अब, शीर्षलेख प्राप्त करने के लिए:

XPath xPath = XPathFactory.newInstance().newXPath();
NodeList tableHeader = (NodeList)xPath.evaluate("//table/thead/th", xhtmlDoc, XPathConstants.NODESET);

String [] headers = new String[tableHeader.getLength()];
for(int i = 0; i < tableHeader.getLength(); i++) {
    headers[i] = tableHeader.item(i).getTextContent();
}

फिर रिकॉर्ड:

XPath xPath = XPathFactory.newInstance().newXPath();
NodeList tableRecords = (NodeList)xPath.evaluate("//table/tbody/tr", xhtmlDoc, XPathConstants.NODESET);

List<String[]> records = new ArrayList<String[]>(tableRecords.getLength());

for(int i = 0; i < tableRecords.getLength(); i++) {
    NodeList recordNodes = tableRecords.item(i).getChildNodes();
    String[] record = new String[recordNodes.getLength()];
    for(int j = 0; j < recordNodes.getLength(); j++)
        record[j] = recordNodes.item(j).getTextContent();
        records.add(record);
    }

अंत में, हमने उन्हें CSV बनाने के लिए एक साथ रखा:

StringBuilder dbaseCsvStringBuilder = new StringBuilder(String.join(",", headers) + "\n");
for(String[] record : records)
        dbaseCsvStringBuilder.append(String.join(",", record) + "\n");
String csvString = dbaseCsvStringBuilder.toString();

यहां संपूर्ण स्रोत कोड है:https://github.com/Debojit/DbaseTranslater/blob/master/src/main/java/nom/side/poc/file/dbf/DbaseReader.java




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस डिजाइन करते समय, एकाधिक सही/गलत मानों को संग्रहीत करने का पसंदीदा तरीका क्या है?

  2. "ORA-00922:अनुपलब्ध या अमान्य विकल्प" तालिका में सम्मिलित करने का प्रयास करते समय

  3. कॉलम का उपयोग करके पंक्तियों को कम संख्या में शून्य से शून्य तक ऑर्डर करें

  4. Oracle में क्वेरी सबक्वेरी के साथ चयन करने के लिए

  5. डेटाबेस परिवर्तन के विनफॉर्म एप्लिकेशन को सूचित करने के लिए DBMS_Alert का उपयोग करने का कोई तरीका है