好的,我有一个非常常见的功能来检查路径中的所有文件(包括子文件夹)。在给定的路径中,我有多个文件夹,如Folder1,Folder2,Folder3 ... Foldern,我想跳过Folder2。这样做的最佳方法是什么?下面是我的功能。
public void loadFileRecursiv(String pathDir)
{
File fisier = new File(pathDir);
File[] listaFisiere = fisier.listFiles();
for(int i = 0; i < listaFisiere.length; i++)
{
if(listaFisiere[i].isDirectory())
{
loadFileRecursiv(pathDir + File.separatorChar + listaFisiere[i].getName());
}
else
{
String cuExtensie = listaFisiere[i].getName();
int pos = cuExtensie.lastIndexOf(".");
String nume = cuExtensie.substring(0, pos);
String acronimBanca = nume.split("_")[0];
String tipAct = nume.split("_")[1];
String dataActString = nume.split("_")[2];
SimpleDateFormat old = new SimpleDateFormat("dd-MM-yyyy");
SimpleDateFormat newPattern = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dataFormatata = null;
try
{
dataFormatata = newPattern.format(old.parse(dataActString));
}
catch(ParseException e)
{
e.printStackTrace();
}
//String denBanca = inlocuireAcronim(acronimBanca);
processFolder(acronimBanca, acronimBanca);
insertData(listaFisiere[i], nume, acronimBanca, tipAct, dataFormatata);
System.out.println("AICI =========== " + pathDir + File.separatorChar + listaFisiere[i].getName());
moveFile(pathDir + File.separatorChar + listaFisiere[i].getName(), "/u02/ActeConstitutive/Mutate/");
}
}
}
答案 0 :(得分:2)
我建议您使用包含要跳过的文件夹的Set。
// get the folders you want to avoid and add them to your set
File Folder2 = new File(pathName);
Set<File> folderToSkip = new HashSet<File>();
folderToSkip.add(Folder2);
// add as many other folders you want to avoid
然后在for循环中,您可以检查是否要进入此文件夹
for(int i = 0; i < listaFisiere.length; i++){
if(!folderToSkip.contains(listaFisiere[i]){
// do your stuff...
}
}
答案 1 :(得分:1)
虽然您的方法是递归的,但递归部分仅适用于文件夹级别。您可以通过
跳过循环操作continue
关键字。如下:
for(int i = 0;i<5;i++){
if(i == 0){
continue;
}
System.out.println(i);
}
将跳过第一个操作0,并输出以下
1
2
3
4
这允许你构建一个更模块化的循环,在我看来看起来比
更好for(int i = 0;i<5;i++){
if(i != 0){
System.out.println(i);
}
}
尤其是在嵌入更多条件或循环时,如下所示:
for(int i = 0;i<5;i++){
if(i != 0){
if(i != 0){
if(i != 0){
if(i != 0){
if(i != 0){
// stuff
}
}
}
}
}
}
答案 2 :(得分:0)
这样做:
foreach (object user in checkedListBoxUsersWhoSee.Items)
{
// Privileged = if the user is checked he has privileges;
alias = user.ToString().Substring(user.ToString().Length - 3);
SelectUserID = new SqlCommand(Properties.Resources.SelectUserID + alias, TeamPWSecureBD);
userIDAuth = (int)SelectUserID.ExecuteScalar();
InsertAuths.Parameters.AddWithValue("@idPass", idPass);
InsertAuths.Parameters.AddWithValue("@idUser", userIDAuth);
InsertAuths.Parameters.AddWithValue("@Privileged", idPass);
//Code not finished
}
答案 3 :(得分:0)
在方法的第一个处添加if语句。
public void loadFileRecursiv(String pathDir)
{
if(new File(pathDir).isDirectory() && skip(pathDir))
return;
并使skip
方法获取路径并检查是否要跳过该文件夹;返回一个布尔值。 true意味着跳过它。