From eff6db842c5ec76284be4ebd96d95e8dae9a8f11 Mon Sep 17 00:00:00 2001 From: ppapou Date: Thu, 10 Aug 2023 17:17:51 -0400 Subject: [PATCH 1/2] The second multithreading task - file scanner has added --- src/FileCounterTask.java | 66 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/FileCounterTask.java diff --git a/src/FileCounterTask.java b/src/FileCounterTask.java new file mode 100644 index 0000000..182adbc --- /dev/null +++ b/src/FileCounterTask.java @@ -0,0 +1,66 @@ +package scanner; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.RecursiveTask; +import java.util.concurrent.atomic.AtomicLong; + +public class FileCounterTask extends RecursiveTask { + + /** + * Current processed file + */ + protected final File mFile; + /** + * All documents in folder + */ + protected final AtomicLong mDocumentCount; + /** + * Directories count + */ + protected final AtomicLong mFolderCount; + FileCounterTask(File file, AtomicLong mDocumentCount, AtomicLong mFolderCount) { + this.mFile = file; + this.mDocumentCount = new AtomicLong(0); + this.mFolderCount = new AtomicLong(0); + } + + /** + * + * @return files number + */ + public long documentCount() {return mDocumentCount}; + + /** + * + * @return directories number + */ + public long folderCount() {return mFolderCount}; + + @Override + protected Long compute() { + if (mFile.isFile()) { + mDocumentCount.incrementAndGet(); + } else { + mFolderCount.incrementAndGet(); + } + + List> forkJoinTaskList = new ArrayList<>(); + for(File file: Objects.requireNonNull(mFile.listFiles())) { + //the task for each File + forkJoinTaskList.add( + new FileCounterTask(file, mDocumentCount, mFolderCount).fork()); + } + + long sum = 0; + + for (ForkJoinTask forkJoinTask: forkJoinTaskList) { + sum += forkJoinTask.join(); + } + + return sum; + } +} From 2ebac0414558ab422c439e3201e508eae4af99f3 Mon Sep 17 00:00:00 2001 From: ppapou Date: Thu, 10 Aug 2023 17:43:08 -0400 Subject: [PATCH 2/2] File scanner module structure --- {src => filescanner/src}/FileCounterTask.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) rename {src => filescanner/src}/FileCounterTask.java (91%) diff --git a/src/FileCounterTask.java b/filescanner/src/FileCounterTask.java similarity index 91% rename from src/FileCounterTask.java rename to filescanner/src/FileCounterTask.java index 182adbc..dd5b708 100644 --- a/src/FileCounterTask.java +++ b/filescanner/src/FileCounterTask.java @@ -1,5 +1,3 @@ -package scanner; - import java.io.File; import java.util.ArrayList; import java.util.List; @@ -32,13 +30,17 @@ public class FileCounterTask extends RecursiveTask { * * @return files number */ - public long documentCount() {return mDocumentCount}; + public AtomicLong documentCount() { + return mDocumentCount; + }; /** * * @return directories number */ - public long folderCount() {return mFolderCount}; + public AtomicLong folderCount() { + return mFolderCount; + } @Override protected Long compute() {