我在 Java 目录中移动文件时遇到问题。问题是我无法理解为什么程序的行为方式如此。下面是对我的真实程序的(轻微)修改。
我遍历目录的目录。在每个遍历的目录中都有文本文件,我想将它们移动到遍历目录的两个子目录中。我创建了这两个目录(trainingData
和testData
)。我希望将 30 个文件移动到testData
目录中,并将其中的 60 个文件移动到trainingData
目录中。为此,我制作了两个 for 循环。
在下面的代码中,我首先将循环移动文件放入trainingData
. 好消息是所有这 60 个文件都真正移入了trainingData
. 然而,第二个循环似乎没有做任何事情——这 30 个剩余文件中的任何一个都没有被移动。这 30 个文件继续保留在原始(遍历)目录中。
此外,非常奇怪的是,当我交换两个循环时 - 将一个移动 30 个文件的第一个放在第一个位置,另一个放在它后面,然后 30 个文件正确移动到testData
其他 60 个文件中的 30 个被移动到trainingData
目录中,其余 30 个文件保留在原始(遍历)目录中。
该程序仍然没有做我想要的(只是部分),但是,让我困扰的是,当我交换两个循环的位置时,我不明白为什么会有这种差异(??)。代码是相同的,应该工作相同,不是吗?
感谢您花时间研究代码,如有必要,我愿意提供更多代码和解释。
File[] reviews = null;
for(File sortedRevDir : sortedRevDirs) {
reviews = sortedRevDir.listFiles();
int numFiles = 90;
int numTwoThirds = 60;
int numOneThirds = numFiles - numTwoThirds;
String trainingDir = sortedRevDir.getAbsolutePath() + "/trainingData";
File trDir = new File(trainingDir);
trDir.mkdir();
String testDir = sortedRevDir.getAbsolutePath() + "/testData";
File tsDir = new File(testDir);
tsDir.mkdir();
for(int i = 0; i < numTwoThirds; i++) {
File review = reviews[i];
if(!review.isDirectory()) {
File reviewCopied = new File(trDir + "/" + review.getName());
review.renameTo(reviewCopied);
}
}
for(int j = 0; j < numOneThird; j++) {
File review = reviews[j];
if(!review.isDirectory()) {
File reviewCopied = new File(tsDir + "/" + review.getName());
review.renameTo(reviewCopied);
}
}
}