我试图从两个数组中找到常用名称文件。 我已经在两个不同的数组中保存了两个不同文件夹的文件名。
现在我正在创建一个公共文件数组,其中包含具有通用名称的文件。
文件名1:包含文件夹1中文件名称的数组。
filename 2:包含文件夹2中文件名的数组。
import java.io.File;
import java.util.*;
public class ListFiles1
{
public static void main(String[] args)
{
String path1 = "C:\\";
String path2 = "D:\\";
File folder1 = new File(path1);
File folder2 = new File(path2);
String[] f1=folder1.list();
File[] listOfFiles1 = folder1.listFiles();
File[] listOfFiles2 = folder2.listFiles();
ArrayList<String> fileNames1 = new ArrayList<>();
ArrayList<String> fileNames2 = new ArrayList<>();
for (int i = 0; i < listOfFiles1.length; i++)
{
if (listOfFiles1[i].isFile())
{
fileNames1.add(listOfFiles1[i].getName());
System.out.println(f1[i] + " is a file");
}
}
for (int j = 0; j < listOfFiles2.length; j++)
{
if (listOfFiles2[j].isFile())
{
fileNames2.add(listOfFiles2[j].getName());
}
}
ArrayList<String> commonfiles = new ArrayList<>();
for (int i = 0; i < listOfFiles1.length; i++)
{
for (int j = 0; i < listOfFiles2.length; j++)
{
String tempfilename1;
String tempfilename2;
tempfilename1=fileNames1[i];
tempfilename2 = fileNames2[j];
if(tempfilename1.equals(tempfilename2))
{
commonfiles.add(tempfilename1);
}
}
}
}
}
我写了这段代码,但编译器给出了这个错误:
Main.java:52: error: array required, but ArrayList<String> found
tempfilename1=fileNames1[i];
^
Main.java:53: error: array required, but ArrayList<String> found
tempfilename2 = fileNames2[j];
^
P.S:我是新手......
答案 0 :(得分:5)
如果filenames1
是array
,则您无法使用ArrayList
方法get(int i)
。
您需要使用array
访问arrayName[elementIndex]
元素。
在你的情况下:
tempfilename1=filenames1[i];
tempfilename2=fileNames2[j];
答案 1 :(得分:0)
您可以执行以下操作来获取两个数组之间的通用字符串集:
String[] listOfFiles1 = {"file1", "file2", "file3"};
String[] listOfFiles2 = {"file2", "file3", "file5"};
HashSet<String> common = new HashSet<String>(Arrays.asList(listOfFiles1));
common.retainAll(new HashSet<String>(Arrays.asList(listOfFiles2)));
System.out.println(common); // -> output: file2, file3
您不需要将它们转换为集合,但这样可以消除重复键的风险。如果你想显示重复项,你可以简化一下:
List<String> common = new ArrayList<String>(Arrays.asList(listOfFiles1));
list1.retainAll(Arrays.asList(listOfFiles2));