我在Java中的目录中移动文件时遇到问题。问题是,我不明白为什么程序的行为方式。以下是我的真实程序的(轻微)修改。使用Java将文件从一个目录移动到另一个目录
我遍历目录的目录。在每个遍历目录 中都有文本文件,我想将其移动到遍历目录的两个子目录中。我创建了这两个目录(trainingData
和testData
)。我想将30个文件移入testData
目录,其中60个文件位于trainingData
目录中。为此,我制作了两个for循环。
在下面的代码中,我先把循环移动到trainingData
。好消息是,所有这60个文件真的被转移到trainingData
。但是,第二个循环似乎没有做任何事情 - 没有任何这30个剩余文件的文件被移动。这30个文件继续保留在原始(遍历)目录中。
此外,很奇怪的是,当我交换两个循环时 - 将30个文件放在首位,另一个放在其后,然后将30个文件正确移入testData
,但是,30的其他60个文件移动到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);
}
}
}
一个快速的样式建议:“numFiles”会更好,像“fileQuantity”。因为它可能是包含数字的文件列表,与文件相关的数字列表或其他内容,如果不查看声明,我也不会知道。 numOneThird会更简单,因为numFiles/3和numTwoThirds会更简单,因为numFiles * 2/3。您所做的所有操作都是用单词中的相同语句替换数学语句。理想情况下,变量名应该给出一个线索,说明为什么你要把90分成组。 – Imagist 2009-07-18 22:18:05
谢谢,我会记住它。 – user42155 2009-07-19 00:32:29