Javaのディレクトリ内のファイルの移動に問題があります。問題は、プログラムがなぜそのように動作するのか理解できないことです。以下は私の実際のプログラムの(わずかな)変更です。
ディレクトリのディレクトリをトラバースします。これらのトラバースされたディレクトリのそれぞれに、トラバースされたディレクトリの2つのサブディレクトリに移動したいテキストファイルがあります。これらの2つのディレクトリ(trainingData
およびtestData
)を作成します。testData
30個のファイルをディレクトリに移動し、60個をディレクトリに移動したいと思いますtrainingData
。この目的のために、2つのforループを作成します。
以下のコードでは、最初にファイルをに移動するループを配置しましたtrainingData
。そして良いニュースは、これらの60個のファイルすべてが実際にに移動されることtrainingData
です。ただし、2番目のループは何も作成しないようです。残りの30個のファイルのいずれのファイルも移動されません。これらの30個のファイルは、引き続き元の(トラバースされた)ディレクトリに残ります。
さらに、非常に奇妙なことに、2つのループを交換すると、1つは最初に30個のファイルを移動し、もう1つはその後に移動しますが、30個のファイルは正しく移動されますがtestData
、他の60個のファイルのうち30個は正しく移動されます。はディレクトリに移動されtrainingData
、残りの30個のファイルは元の(トラバースされた)ディレクトリに残ります。
プログラムはまだ(部分的に)私が望むことをしません、しかし、私が2つのループの場所を交換するとき、なぜこの違い(??)がなぜなのか理解できないのが気になります。コードは同じで、同じように機能するはずですよね?
コードを調べてくれてありがとう。必要に応じて、さらにコードと説明を提供したいと思います。
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);
}
}
}