我正在尝试从文件夹中读取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();
}
任何人都可以帮助如何按正确的顺序对文件进行排序吗?提前谢谢
答案 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);