私は現在、「確率と統計」クラスの宿題で遊んでいます。これは、ディスクセグメントのサイズと効率に関するものです。
データを収集するための簡単なファイルクローラーを書きました
public static void addTree(File file, Collection<File> all) {
File[] children = file.listFiles();
if (children != null) {
for (File child : children) {
addTree(child, all);
}
}else{
all.add(file);
}
}
public static void main(String[] args) {
Collection<File> all = new ArrayList<File>();
//build file list
System.out.println("COLLECTING");
addTree(new File("."), all);
//result file
try {
//result file stream
FileWriter fstream = null;
fstream = new FileWriter("result.txt");
//result file writer
BufferedWriter out = new BufferedWriter(fstream);
System.out.println("SAVING STARTED");
//loop - find size and extension (lowercase)
Iterator itr = all.iterator();
while(itr.hasNext()){
//get file
File tested = (File) itr.next();
//get ext
String[] splitted = tested.getName().split("\\.");
String ext = splitted[splitted.length-1];
//get size
long size = tested.length();
//put into file
//if(size!=0){
out.write(size+" "+ext);
out.newLine();
//}
}
//close file / save
out.close();
}catch(IOException ex){}
}
2 つの質問があります。1) D:/ をスキャンした後、約 480k のファイルが見つかったクローラーが表示されましたが、システムは約 507k のファイルがあると主張しています。OK、おそらく隠しファイルかそのようなものだと思います。しかし、C をスキャンした後:/ スコアは少し逆です。クローラーは 229k を検出し、Windows は 227k を要求します。これは私には理解するのが少し難しいです。
2) ご覧のとおり
//if(size!=0){
out.write(size+" "+ext);
out.newLine();
//}
クローラーはすべてのファイル (サイズがゼロのファイルも含む) を取得し、表示されました。私の D:/ には 507k のうち約 104k の非ゼロ ファイルしかありません (OS パーティションではなく、アプリケーション ファイルのみ - システム ファイルは関係ありません)。まったく内容のないファイルが 80% あるというのはばかげたナンセンスです。わかりました、後で使用するためにファイルを作成する必要がある場合がありますが、これは誰かがファイル名をOSグローバル変数などと誤って解釈したようです。
誰かがこの問題を明確にしてもらえますか?