我在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