我有数组File [] polFiles。某些文件可以通过其他函数删除,而我编写函数可以从阵列中清除远程文件。例如,如果文件[] polFile中存在P0,P1,P2,P3,P4,并且被P1和P2删除,则现在polFiles将由P0,P2和P4组成。怎么做?我写了简单的代码,但是它引发了异常和错误。

int delcount = 0;
for (File file : files) {
    if (!file.exists()) {
        delcount++;
    }
}
File[] newfiles = new File[files.length-delcount];
int fcount = 0;
for (int i = 0; i < newfiles.length; i++) {
    if (!files[i].exists()) {
        fcount++;
        for (int j = i; j < files.length-fcount-1; j++) {
            newfiles[j] = files[j+fcount];
        }
    } else {
        newfiles[i] = files[i+fcount];
    }
}
System.arraycopy(newfiles, 0, files, 0, newfiles.length);
for (int i = newfiles.length; i < files.length; i++) {
    files[i] = null;
}


哪里有错?此代码抛出Null异常,并且无法正常工作。它仅从数组中删除第一个文件

最佳答案

如果要在没有库帮助的情况下执行此操作,请尝试以下操作:

private File[] compactor(File[] files) {
    int deleted = 0;
    for (int i = 0; i < files.length; i++) {
        File file = files[i];
        if (file.exists()) {
            files[i - deleted] = file;
        } else {
            files[i] = null;
            deleted++;
        }
    }

    int nSize = files.length - deleted;
    File[] newFiles = new File[nSize];
    if (nSize > 0) {
        System.arraycopy(files, 0, newFiles, 0, newFiles.length);
    }
    System.out.println(Arrays.toString(newFiles));
    return newFiles;
}


只需检查是否需要添加任何边界条件。

09-16 04:02
查看更多