我有数组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;
}
只需检查是否需要添加任何边界条件。