我有以下代码:
ArrayList<String> File_name = new ArrayList<String>();
try {
//Reading an XML file, created above
File fXmlFile = new File("C:\\Users\\V\\Documents\\diplwmatiki\\temp\\dokimi.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
//optional, but recommended
//read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
doc.getDocumentElement().normalize();
//Printing the attributes of the XML file
System.out.println("\nRoot element :" + doc.getDocumentElement().getNodeName());
NodeList nList = doc.getElementsByTagName("element");
System.out.println("----------------------------");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
System.out.println("\nCurrent Element :" + nNode.getNodeName());
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
System.out.println("element : " + eElement.getAttribute("id"));
System.out.println("File_name : " + eElement.getElementsByTagName("name").item(0).getTextContent());
File_name.add(eElement.getElementsByTagName("name").item(0).getTextContent());
}
}
}
catch (Exception e) {
e.printStackTrace();
}
System.out.println("\n");
System.out.println(File_name);
System.out.println("\n");
//Creating an list having all files of a directory
String path = "C:\\Users\\V\\Documents\\diplwmatiki\\SFBs";
String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
System.out.println(files);
}
}
我想比较使用ArrayLists
创建的两个files.retainAll(File_name);
,因为我需要保留第二个列表中的文件,这些文件的名称在第一个列表中作为字符串存在。 RetainAll();
不起作用,因为它们有两种不同的类型:String
和File
。我试图使过滤器如下所示,但我得到语法错误,当我尝试纠正它们似乎不起作用。这是过滤器:
String[] myFiles = folder.list(new FilenameFilter(){
for (int i=0; i < listOfFiles.length; i++){
public boolean accept;File folder; String fileName;{
return fileName.startsWith(File_name[i]);
System.out.println(folder);
}
});
我在第一行和最后一行插入或删除标记错误。我在此过滤器中不使用retainAll()
。
对不起,很长的帖子谢谢!
答案 0 :(得分:1)
您可以使用File.getName()
String
名称与第二个列表中getName()
元素上的File
进行比较。String
列表,然后使用retainAll()
答案 1 :(得分:1)
首先,鉴于其当前结构,您的代码根本不起作用。调用files.retainAll(File_name)时,File_name将不存在;另外,使用大写字母启动变量是不好的做法。也就是说,一旦修复,你可以执行以下操作,将所有保留的文件放在一个新的ArrayList中:
ArrayList<File> retainedFiles = new ArrayList<File>();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
files = listOfFiles[i].getName();
if (File_name.contains(files))
retainedFiles.add(listOfFiles[i]);
}
}
(编辑以反映以下评论)