Java를 사용하여 출력 디렉토리의 파일 속성을 볼 수 있는 프로그램
나는 그 프로그램을 해 보았다.
절차 요건
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Date;
import java.util.Locale;
import java.util.Scanner;
import java.util.stream.Stream;
public class Main {
//
private static int count = 0;
private static int fileCount = 0;
private static int dirCount = 0;
private static int totalSize = 0;
public static void main(String[] args) throws java.io.IOException{
//コマンドラインで出力対象のトップディレクトリまでの、実行ファイルからの相対パスを記入
System.out.println("トップディレクトリ名を入力してください");
@SuppressWarnings("resource")
Scanner sc1 = new Scanner(System.in);
String line1 = sc1.nextLine();
Path topDirName = Paths.get(line1);
//トップトップディレクトリ以下の全てのファイル及びディレクトリのパスのストリームを取得
try(Stream<Path> stream = Files.walk(topDirName)) {
//トップディレクトの情報は表示しない(スキップする)
stream.skip(1).forEach(p -> {
try {
//ファイル属性を取得
BasicFileAttributes attributes = Files.readAttributes(p, BasicFileAttributes.class);
//一番最初の階層は.\で固定
if(p.getNameCount() <= 2){
System.out.print("./");
//2階層以降
}else{
//トップディレクトリ名を削除し、パスから最下層のファイル名を除く
StringBuilder sb = new StringBuilder();
sb.append(p.getParent() + " ");
sb.delete(0,sb.toString().indexOf((int)'/'));
////ファイルパスを出力
System.out.print("." + sb.toString());
}
//ファイル名を出力
System.out.print(p.getFileName() + " ");
//対象がディレクトリの場合
if (Files.isDirectory(p)){
//ディレクトリ数をインクリメント
dirCount++;
File dir = new File(p.toString());
//カウンタをリセット
count = 0;
count = count(dir.listFiles());
//ディレクトリ内のファイル及び、フォルダを出力
System.out.print("Dir("+ count + ")" + " ");
//対象がディレクトリ出ない場合
}else{
//ファイルサイズを出力
System.out.print(attributes.size()+ " ");
//ファイル数をインクリメント
fileCount++;
//ファイル容量を加算
totalSize += attributes.size();
}
//ファイルの最終更日時を出力
Date firstDate = new Date();
FileTime time = FileTime.fromMillis( firstDate.getTime() );
LocalDateTime ldt = LocalDateTime.ofInstant( time.toInstant(), ZoneId.systemDefault());
System.out.println(ldt.format( DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
.withLocale( Locale.JAPANESE ) ) );
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
});
System.out.println("ファイルの数" + " : " + fileCount);
System.out.println("ディレクトリの数" + " : " + dirCount);
System.out.println("総容量" + " : " + totalSize);
}catch(IOException e) {
System.out.println(e);
}
}
//ディレクトリの中身のそうファイル数をカウントする(サブディレクトリも再起的にカウント)
private static int count(File[] list) {
for (File f : list) {
if (f.isDirectory()) {
count(f.listFiles());
} else if (f.isFile()) {
count++;
}
}
return count;
}
}
실행 결과※ Windows는 디렉터리 속성에 기술된 총 크기, 총 파일 수, 총 목록 수와 일치
Mac면 왜 편차가 생겼는지 모르겠어요.이에 비해 윈도우즈와 맥 디렉터리의 크기는 다르다.
파일 시스템의 영향일 수도 있고 1KB=1000b일 수도 있습니다.
Reference
이 문제에 관하여(Java를 사용하여 출력 디렉토리의 파일 속성을 볼 수 있는 프로그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Web606/items/6da00bb6ba4874bf77d1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)