在Java中从上到下读取文件夹中的文件

时间:2016-10-24 11:24:46

标签: java xml file

我正在尝试从文件夹中读取XML文件。在我读取文件后,我正在提取一个元素并将其写入文本文件中。

文件名称看起来像

zey_3_20161020-092152_JK6_NO.xml
zey_57_20161020-092152_A_K6.xml
zey_256_20161020-092152_B_A.xml
zey_1000_20161020-092152_B_A.xml

但是当我阅读文件时,我没有得到正确的订单。 我收到这样的订单:

zey_1000_20161020-092152_B_A.xml
zey_256_20161020-092152_B_A.xml
zey_3_20161020-092152_JK6_NO.xml
zey_57_20161020-092152_A_K6.xml

这是我的代码:

private String rgId;
private NodeList rgIdList;
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> counter = new ArrayList<String>();
String splitFile = null;

public ReadXML() throws ParserConfigurationException, SAXException
{
    try
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();

        File folder = new File("C:/...");
        File[] listFiles = folder.listFiles();

        for (File file : listFiles) {
            if (file.isFile()) {                
                System.out.println(file.getName());

                Document document = builder.parse(file);
                rgIdList = document.getElementsByTagName("id");

                if (rgIdList.getLength() > 0) {
                    rgId = rgIdList.item(0).getTextContent().toString();
                    list.add( rgId);
                }
            }
        }

        FileWriter fw = new FileWriter("C:/....");

        for (String str : list) {
            fw.write(str + "\r\n");
        }
        fw.close();

        System.out.println(list);
    } catch (IOException e) {
        System.out.println(e);
    }
}

public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException {

    new ReadXML();
}

任何人都可以帮助如何按正确的顺序对文件进行排序吗?提前谢谢

2 个答案:

答案 0 :(得分:1)

您的问题与您依赖File#listFiles()结果的顺序这一事实有关,但订单无法保证,如javadoc中所述:

  

无保证表示结果数组中的名称字符串   将以任何特定顺序出现;特别是,它们不是   保证按字母顺序出现。

如果您需要特定订单,则应使用Arrays.sort(T[] a, Comparator<? super T> c)自行对文件进行排序。

File[] listFiles = folder.listFiles();
Arrays.sort(listFiles, myComparator);
for (File file : listFiles) {
    ...
}

答案 1 :(得分:0)

获取文件后,您只需使用Arrays

中的排序方法对其进行排序即可
File[] listFiles = folder.listFiles();
Arrays.sort(listFiles , new Comparator<String>()
  {

     @Override
     public int compare (String o1, String o2)
     {
        return o1.compareTo(o2); //or whatever sorting algorthim is desired
     }

  });

如果您想使用String中实施的比较,则不需要额外的比较器:

File[] listFiles = folder.listFiles();
Arrays.sort(listFiles);