第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

讀取多個(gè)xml文件java

讀取多個(gè)xml文件java

有只小跳蛙 2021-10-27 19:08:04
我有 ~25000 個(gè) XML 文件需要用 Java 讀取。這是我的代碼:private static void ProcessFile() {    try {        File fXmlFile = new File("C:/Users/Emolk/Desktop/000010.xml");        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();        Document doc = dBuilder.parse(fXmlFile);        doc.getDocumentElement().normalize();        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());        NodeList nList = doc.getElementsByTagName("sindex");        System.out.println("----------------------------");        for (int temp = 0; temp < nList.getLength(); temp++) {            Node nNode = nList.item(temp);            System.out.println("");            if (nNode.getNodeType() == Node.ELEMENT_NODE) {                Element eElement = (Element) nNode;                System.out.println("Name : " + eElement.getElementsByTagName("name").item(0).getTextContent());                System.out.println("Count : " + eElement.getElementsByTagName("count").item(0).getTextContent());                Entity CE = new Entity(eElement.getElementsByTagName("name").item(0).getTextContent(), Integer.parseInt(eElement.getElementsByTagName("count").item(0).getTextContent()));                Entities.add(CE);                System.out.println("Entity added! ");            }        }        System.out.println(Entities);        } catch (Exception e) {        e.printStackTrace();        }}我如何讀取 25000 個(gè)文件而不是一個(gè)?我嘗試使用以下方法將所有 xml 文件連接在一起:https : //www.sobolsoft.com/howtouse/combine-xml-files.htm但這給了我這個(gè)錯(cuò)誤:[Fatal Error] joined.xml:130:2: The markup in the document following the root element must be well-formed.
查看完整描述

2 回答

?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果性能不是問題,那么您可以執(zhí)行以下操作,


    import java.io.File;

    import java.util.List;


    import javax.xml.parsers.DocumentBuilder;

    import javax.xml.parsers.DocumentBuilderFactory;


    import org.w3c.dom.Document;

    import org.w3c.dom.NodeList;


    public class ReadFiles {

        public static void main(String[] args) {


            File dir = new File("D:/Work"); //Directory where your file exists


            File [] files = dir.listFiles();


            for(File file : files) {

                if(file.isFile() && file.getName().endsWith(".xml")) { //You can validate file name with extension if needed

                    ProcessFile(file, Entities);  // Assumed you have declared Entities, may be list of other collection

                }

            }


            System.out.println(Entities);

        }


        private static void ProcessFile(File fXmlFile, List<E> Entities) {

            try {


                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

                Document doc = dBuilder.parse(fXmlFile);


                doc.getDocumentElement().normalize();


                System.out.println("Root element :" + doc.getDocumentElement().getNodeName());


                NodeList nList = doc.getElementsByTagName("sindex");


                System.out.println("----------------------------");


                for (int temp = 0; temp < nList.getLength(); temp++) {


                    Node nNode = nList.item(temp);


                    System.out.println("");


                    if (nNode.getNodeType() == Node.ELEMENT_NODE) {


                        Element eElement = (Element) nNode;


                        System.out.println("Name : " + eElement.getElementsByTagName("name").item(0).getTextContent());

                        System.out.println("Count : " + eElement.getElementsByTagName("count").item(0).getTextContent());


                        Entity CE = new Entity(eElement.getElementsByTagName("name").item(0).getTextContent(), Integer.parseInt(eElement.getElementsByTagName("count").item(0).getTextContent()));

                        Entities.add(CE);

                        System.out.println("Entity added! ");

                    }

                }           

            } catch (Exception e) {

                e.printStackTrace();

            }

        }

    }


查看完整回答
反對(duì) 回復(fù) 2021-10-27
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

要讀取多個(gè)文件,您應(yīng)該使用某種循環(huán)進(jìn)行迭代。您可以掃描目錄中的所有有效文件。


File folder = new File("path/to/directory");

File[] files = folder.listFiles();


for (int i = 0; i < files.length; i++) {

    // you can also filter for .xml if needed

    if (files[i].isFile()) {

        // parse the file

    }

}

接下來,您需要決定如何解析文件:順序或并行。由于您使用多個(gè)線程來解析文件,因此 Parallel 會(huì)快很多。


一根線

您可以重用您已經(jīng)編寫的代碼,并遍歷文件:


for (File file : files) {

    processFile(file, yourListOfEntities);

}

多線程:

獲取一個(gè)ScheduledExecutorService并提交多個(gè)任務(wù)。


ExecutorService service = Executors.newFixedThreadPool(5);


for (File file : files) {

    service.execute(() -> processFile(file, yourListOfEntities));

}

這里有一個(gè)重要的注意事項(xiàng): 的默認(rèn)實(shí)現(xiàn)ArrayList不是線程安全的,所以你應(yīng)該(因?yàn)長(zhǎng)ist被多個(gè)線程使用)同步對(duì)它的訪問:


List<Entity> synchronizedList = Collections.synchronizedList(yourListOfEntities);

此外,DocumentBuilder不是線程安全的,應(yīng)該為每個(gè)線程創(chuàng)建一次(如果你只是調(diào)用你的方法,你就對(duì)了)。如果您考慮優(yōu)化它,則此注釋僅適用于這種情況。


查看完整回答
反對(duì) 回復(fù) 2021-10-27
  • 2 回答
  • 0 關(guān)注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)