Advertisement
dzocesrce

[NP] File System Mapped

Apr 23rd, 2025
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.00 KB | None | 0 0
  1. import java.time.LocalDateTime;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4. import java.time.LocalDateTime;
  5. import java.util.Comparator;
  6. import java.time.LocalDateTime;
  7. import java.util.*;
  8. import java.util.stream.Collectors;
  9. public class FileSystemTest {
  10.     public static void main(String[] args) {
  11.         FileSystem fileSystem = new FileSystem();
  12.         Scanner scanner = new Scanner(System.in);
  13.         int n = scanner.nextInt();
  14.         scanner.nextLine();
  15.         for (int i = 0; i < n; i++) {
  16.             String line = scanner.nextLine();
  17.             String[] parts = line.split(":");
  18.             fileSystem.addFile(parts[0].charAt(0), parts[1],
  19.                     Integer.parseInt(parts[2]),
  20.                     LocalDateTime.of(2016, 12, 29, 0, 0, 0).minusDays(Integer.parseInt(parts[3]))
  21.             );
  22.         }
  23.         int action = scanner.nextInt();
  24.         if (action == 0) {
  25.             scanner.nextLine();
  26.             int size = scanner.nextInt();
  27.             System.out.println("== Find all hidden files with size less then " + size);
  28.             List<File> files = fileSystem.findAllHiddenFilesWithSizeLessThen(size);
  29.             files.forEach(System.out::println);
  30.         } else if (action == 1) {
  31.             scanner.nextLine();
  32.             String[] parts = scanner.nextLine().split(":");
  33.             System.out.println("== Total size of files from folders: " + Arrays.toString(parts));
  34.             int totalSize = fileSystem.totalSizeOfFilesFromFolders(Arrays.stream(parts)
  35.                     .map(s -> s.charAt(0))
  36.                     .collect(Collectors.toList()));
  37.             System.out.println(totalSize);
  38.         } else if (action == 2) {
  39.             System.out.println("== Files by year");
  40.             Map<Integer, Set<File>> byYear = fileSystem.byYear();
  41.             byYear.keySet().stream().sorted()
  42.                     .forEach(key -> {
  43.                         System.out.printf("Year: %d\n", key);
  44.                         Set<File> files = byYear.get(key);
  45.                         files.stream()
  46.                                 .sorted()
  47.                                 .forEach(System.out::println);
  48.                     });
  49.         } else if (action == 3) {
  50.             System.out.println("== Size by month and day");
  51.             Map<String, Long> byMonthAndDay = fileSystem.sizeByMonthAndDay();
  52.             byMonthAndDay.keySet().stream().sorted()
  53.                     .forEach(key -> System.out.printf("%s -> %d\n", key, byMonthAndDay.get(key)));
  54.         }
  55.         scanner.close();
  56.     }
  57. }
  58.  
  59. class FileSystem {
  60.     List<File> files;
  61.  
  62.     public FileSystem() {
  63.         this.files = new ArrayList<>();
  64.     }
  65.  
  66.     public void addFile(char folder, String name, int size, LocalDateTime localDateTime) {
  67.         files.add(new File(folder,name,size,localDateTime));
  68.     }
  69.  
  70.     public List<File> findAllHiddenFilesWithSizeLessThen(int size) {
  71.         return files.stream()
  72.                 .filter(i->i.getName().charAt(0)=='.'&& i.getSize()<size)
  73.                 .sorted()
  74.                 .collect(Collectors.toList());
  75.  
  76.     }
  77.  
  78.     public int totalSizeOfFilesFromFolders(List<Character> collect) {
  79.         int sumOfAllFiles=0;
  80.         for(Character c : collect) {
  81.             sumOfAllFiles+=files.stream().filter(i->i.getFolder()==c).mapToInt(File::getSize).sum();
  82.         }
  83.         return sumOfAllFiles;
  84.     }
  85.  
  86.     public Map<Integer, Set<File>> byYear() {
  87.         return files.stream().sorted().collect(Collectors.groupingBy(
  88.                 File::getYear,
  89.                 Collectors.toSet()
  90.         ));
  91.     }
  92.  
  93.     public Map<String, Long> sizeByMonthAndDay() {
  94.         return files.stream().sorted().collect(Collectors.groupingBy(
  95.                 File::getMonthAndDay,
  96.                 Collectors.summingLong(File::getSize)
  97.         ));
  98.     }
  99. }
  100.  
  101.  
  102. class File implements Comparable<File>{
  103.     char folder;
  104.     String name;
  105.     int size;
  106.     LocalDateTime createdAt;
  107.  
  108.     public char getFolder() {
  109.         return folder;
  110.     }
  111.  
  112.     public String getName() {
  113.         return name;
  114.     }
  115.  
  116.     public int getSize() {
  117.         return size;
  118.     }
  119.  
  120.     public LocalDateTime getCreatedAt() {
  121.         return createdAt;
  122.     }
  123.  
  124.     public int getYear(){
  125.         return createdAt.getYear();
  126.     }
  127.  
  128.     public String getMonthAndDay(){
  129.         return createdAt.getMonth().toString()+"-"+createdAt.getDayOfMonth();
  130.     }
  131.  
  132.     public File(char folder, String name, int size, LocalDateTime createdAt) {
  133.         this.folder = folder;
  134.         this.name = name;
  135.         this.size = size;
  136.         this.createdAt = createdAt;
  137.     }
  138.  
  139.     @Override
  140.     public String toString() {
  141.         return String.format("%-10s %5dB %s",getName(),getSize(),getCreatedAt());
  142.     }
  143.  
  144.     @Override
  145.     public int compareTo(File o) {
  146.         return Comparator.comparing(File::getFolder)
  147.                 .thenComparing(File::getCreatedAt)
  148.                 .thenComparing(File::getName)
  149.                 .thenComparing(File::getSize)
  150.                 .compare(this,o);
  151.     }
  152. }
  153.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement