diff --git a/.classpath b/.classpath index 541d5b4..fe2d5f8 100755 --- a/.classpath +++ b/.classpath @@ -1,11 +1,7 @@ - - - - - - - - - - - + + + + + + + diff --git a/.project b/.project index bd10b60..7debf88 100755 --- a/.project +++ b/.project @@ -12,7 +12,6 @@ - org.scala-ide.sdt.core.scalanature org.eclipse.jdt.core.javanature diff --git a/README.md b/README.md index 1ac7514..57cae7a 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# treesize - -Rudimentäre Quick-and-dirty-Implementation des tree-Kommandos (Linux), einmal in Java und einmal in Scala - -* 16-Oct-2019 Erstellt und in svn-Repo hochgeladen -* 02-Jun-2022 Mit git2svn in lokales git-Repo migriert und in selbstgehosteten Gitea-Server gepusht -___ +# treesize + +Rudimentäre Quick-and-dirty-Implementation des tree-Kommandos (Linux), einmal in Java und einmal in Scala + +* 16-Oct-2019 Erstellt und in svn-Repo hochgeladen +* 02-Jun-2022 Mit git2svn in lokales git-Repo migriert und in selbstgehosteten Gitea-Server gepusht +___ RS 02-Jun-2022 \ No newline at end of file diff --git a/src/dev/rsems/treesize/j/Directory.java b/src/dev/rsems/treesize/j/Directory.java index 0da3f82..874b490 100755 --- a/src/dev/rsems/treesize/j/Directory.java +++ b/src/dev/rsems/treesize/j/Directory.java @@ -14,11 +14,12 @@ public class Directory { Long localSize; Long totalSize; List children; + File[] files = null; public Directory(Directory parent, File fsdir) { this.parent = parent; this.fsdir = fsdir; - File[] files = fsdir.listFiles(new FileFilter() { + files = fsdir.listFiles(new FileFilter() { @Override public boolean accept(File f) { return f.isFile() && !Files.isSymbolicLink(f.toPath()); diff --git a/src/dev/rsems/treesize/j/Test.java b/src/dev/rsems/treesize/j/Test.java index e22e7e3..6ba99ae 100755 --- a/src/dev/rsems/treesize/j/Test.java +++ b/src/dev/rsems/treesize/j/Test.java @@ -5,6 +5,11 @@ import java.io.IOException; import java.util.List; public class Test { + // + private static String CORNER = " └── "; + private static String BLANK = " "; + private static String JUNCTION = " ├── "; + private static String LINE = " │ "; static void recurse(Directory d, int level) { List subs = d.children; @@ -12,22 +17,21 @@ public class Test { Directory child = subs.get(i); Long ts = child.totalSize; if (true) /* (ts >= 100000000L) */ { - StringBuilder sb = new StringBuilder(String.format("%,16d ", ts)); + StringBuilder sb = new StringBuilder(String.format("D %,16d ", ts)); String s = ""; Directory temp = child; int loop = 0; while (temp.parent != null) { - /* ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ */ if (temp.parent.children.indexOf(temp) == temp.parent.children.size() - 1) { if (loop == 0) { - s = " └── " + s; + s = CORNER + s; } else { - s = " " + s; + s = BLANK + s; } } else if (loop == 0) { - s = " ├── " + s; + s = JUNCTION + s; } else { - s = " │ " + s; + s = LINE + s; } temp = temp.parent; loop++; @@ -35,13 +39,47 @@ public class Test { sb.append(s).append(child.fsdir.getName()); System.out.println(sb.toString()); } - if (level <= 4) recurse(child, level + 1); + + /* if (level <= 4) */ + + recurse(child, level + 1); + + int j = 0; + for (File f : child.files) { + Long fs = f.length(); + StringBuilder sb = new StringBuilder(String.format(" %,16d ", fs)); + String s = ""; + Directory temp = child; + int loop = 0; + while (temp.parent != null) { + if (temp.parent.children.indexOf(temp) == temp.parent.children.size() - 1) { + s = BLANK + s; + } else if (loop == 0) { + s = JUNCTION + s; + } else { + s = LINE + s; + } + temp = temp.parent; + loop++; + } + if (j == child.files.length - 1) { + s = s + CORNER; + } else { + s = s + JUNCTION; + } + sb.append(s).append(f.getName()); + System.out.println(sb.toString()); + j++; + } } } public static void main(String[] args) throws IOException { - Directory d = new Directory(null, new File("/home/rob")); - String s = String.format("%,16d", d.totalSize) + " " + d.fsdir.getCanonicalPath(); + String parm = args.length > 0 ? args[0] : "."; + File dir = new File(parm); +// System.out.println(dir.getCanonicalPath() + "\n"); + Directory d = new Directory(null, dir); + String s = String.format("D %,16d", d.totalSize) + " " + d.fsdir.getCanonicalPath(); System.out.println(s); recurse(d, 1); } diff --git a/src/dev/rsems/treesize/s/Directory.scala b/src/dev/rsems/treesize/s/Directory.scala index 6741af8..fc434d3 100755 --- a/src/dev/rsems/treesize/s/Directory.scala +++ b/src/dev/rsems/treesize/s/Directory.scala @@ -1,23 +1,23 @@ -package dev.rsems.treesize.s - -import java.io.File -import java.nio.file.Files -import scala.collection.mutable.ListBuffer - -class Directory(val fsdir: File, val parent: Directory = null, val sort: Boolean = false) { - private var localSize = 0L - var children = ListBuffer[Directory]() - private val files = fsdir.listFiles - if (files != null) - localSize = files.filter(f => f.isFile() && !Files.isSymbolicLink(f.toPath)).map(f => f.length).sum - var totalSize = localSize - private val dirs = fsdir.listFiles - if (dirs != null) { - totalSize += dirs.filter(f => f.isDirectory() && !Files.isSymbolicLink(f.toPath)).map(dir => { - val subdir = new Directory(dir, this, sort) - children += subdir - subdir.totalSize - }).sum - if (sort) children = children.sortBy(-_.totalSize) - } +package dev.rsems.treesize.s + +import java.io.File +import java.nio.file.Files +import scala.collection.mutable.ListBuffer + +class Directory(val fsdir: File, val parent: Directory = null, val sort: Boolean = false) { + private var localSize = 0L + var children = ListBuffer[Directory]() + private val files = fsdir.listFiles + if (files != null) + localSize = files.filter(f => f.isFile() && !Files.isSymbolicLink(f.toPath)).map(f => f.length).sum + var totalSize = localSize + private val dirs = fsdir.listFiles + if (dirs != null) { + totalSize += dirs.filter(f => f.isDirectory() && !Files.isSymbolicLink(f.toPath)).map(dir => { + val subdir = new Directory(dir, this, sort) + children += subdir + subdir.totalSize + }).sum + if (sort) children = children.sortBy(-_.totalSize) + } } \ No newline at end of file diff --git a/src/dev/rsems/treesize/s/Test.scala b/src/dev/rsems/treesize/s/Test.scala index 4dbf534..21feda3 100755 --- a/src/dev/rsems/treesize/s/Test.scala +++ b/src/dev/rsems/treesize/s/Test.scala @@ -1,48 +1,48 @@ -package dev.rsems.treesize.s - -import java.io.File - -object Test extends App { - // ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ - val LineUpAndRight = " \u2514\u2500\u2500 "; // " └── " - val LineBlank = " "; - val LineVerticalAndRight = " \u251c\u2500\u2500 "; // " ├── " - val LineVertical = " \u2502 "; // " │ " - - def recurse(d: Directory, level: Int) { - for (child <- d.children) { - val ts = child.totalSize - val sb = new StringBuilder("%,16d ".format(ts)) - var s = "" - var temp = child - var loop = 0 - while (temp.parent != null) { - if (temp.parent.children.indexOf(temp) == temp.parent.children.size - 1) { - if (loop == 0) { - s = "└─ " + s - } else { - s = " " + s - } - } else if (loop == 0) { - s = "├─ " + s - } else { - s = "│ " + s - } - temp = temp.parent - loop += 1 - } - sb.append(s).append(child.fsdir.getName) - println(sb.toString) - - // if (level <= 4) - - recurse(child, level + 1) - - } - } - - val dir = new Directory(new File("/home/rob")) - val s = "%,16d".format(dir.totalSize) + " " + dir.fsdir.getCanonicalPath - println(s) - recurse(dir, 1) +package dev.rsems.treesize.s + +import java.io.File + +object Test extends App { + // ─ │ ┌ ┐ └ ┘ ├ ┤ ┬ ┴ ┼ + val LineUpAndRight = " \u2514\u2500\u2500 "; // " └── " + val LineBlank = " "; + val LineVerticalAndRight = " \u251c\u2500\u2500 "; // " ├── " + val LineVertical = " \u2502 "; // " │ " + + def recurse(d: Directory, level: Int) { + for (child <- d.children) { + val ts = child.totalSize + val sb = new StringBuilder("%,16d ".format(ts)) + var s = "" + var temp = child + var loop = 0 + while (temp.parent != null) { + if (temp.parent.children.indexOf(temp) == temp.parent.children.size - 1) { + if (loop == 0) { + s = "└─ " + s + } else { + s = " " + s + } + } else if (loop == 0) { + s = "├─ " + s + } else { + s = "│ " + s + } + temp = temp.parent + loop += 1 + } + sb.append(s).append(child.fsdir.getName) + println(sb.toString) + + // if (level <= 4) + + recurse(child, level + 1) + + } + } + + val dir = new Directory(new File("/home/rob")) + val s = "%,16d".format(dir.totalSize) + " " + dir.fsdir.getCanonicalPath + println(s) + recurse(dir, 1) } \ No newline at end of file