5: Create FileContentProvider
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.bartek.esa.file.di;
|
package com.bartek.esa.file.di;
|
||||||
|
|
||||||
|
import com.bartek.esa.file.provider.FileContentProvider;
|
||||||
import com.bartek.esa.file.provider.FileProvider;
|
import com.bartek.esa.file.provider.FileProvider;
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
@@ -11,4 +12,9 @@ public class FileModule {
|
|||||||
public FileProvider fileProvider() {
|
public FileProvider fileProvider() {
|
||||||
return new FileProvider();
|
return new FileProvider();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
public FileContentProvider fileContentProvider() {
|
||||||
|
return new FileContentProvider();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
src/main/java/com/bartek/esa/file/model/FoundLine.java
Normal file
12
src/main/java/com/bartek/esa/file/model/FoundLine.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.bartek.esa.file.model;
|
||||||
|
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FoundLine {
|
||||||
|
private int number;
|
||||||
|
private String line;
|
||||||
|
private int position;
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package com.bartek.esa.file.provider;
|
||||||
|
|
||||||
|
import com.bartek.esa.error.EsaException;
|
||||||
|
import com.bartek.esa.file.model.FoundLine;
|
||||||
|
import io.vavr.control.Try;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.LineNumberReader;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class FileContentProvider {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public FileContentProvider() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<FoundLine> findPhraseByLines(File file, String regex) {
|
||||||
|
try {
|
||||||
|
return tryToFindPhraseByLines(file, regex);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new EsaException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<FoundLine> tryToFindPhraseByLines(File file, String regex) throws IOException {
|
||||||
|
LineNumberReader lineNumberReader = readForLines(file);
|
||||||
|
List<FoundLine> foundLines = new ArrayList<>();
|
||||||
|
|
||||||
|
String line;
|
||||||
|
Pattern pattern = Pattern.compile(regex);
|
||||||
|
while ((line = lineNumberReader.readLine()) != null) {
|
||||||
|
if (pattern.matcher(line).find()) {
|
||||||
|
foundLines.add(FoundLine.builder()
|
||||||
|
.line(line)
|
||||||
|
.number(lineNumberReader.getLineNumber())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return foundLines;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LineNumberReader readForLines(File file) {
|
||||||
|
return Try.of(() -> new LineNumberReader(new FileReader(file)))
|
||||||
|
.getOrElseThrow(EsaException::new);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String readFile(File file) {
|
||||||
|
StringBuilder content = new StringBuilder();
|
||||||
|
Try.run(() -> Files.lines(file.toPath())
|
||||||
|
.map(line -> line + "\n")
|
||||||
|
.forEach(content::append));
|
||||||
|
|
||||||
|
return content.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,15 +24,6 @@ public class FileProvider {
|
|||||||
.toFile();
|
.toFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String readFile(File file) {
|
|
||||||
StringBuilder content = new StringBuilder();
|
|
||||||
Try.run(() -> Files.lines(file.toPath())
|
|
||||||
.map(line -> line + "\n")
|
|
||||||
.forEach(content::append));
|
|
||||||
|
|
||||||
return content.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<File> findFilesRecursively(String path, String globPattern) {
|
public Set<File> findFilesRecursively(String path, String globPattern) {
|
||||||
return findFilesRecursivelyInSubpath(path, "", globPattern);
|
return findFilesRecursivelyInSubpath(path, "", globPattern);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user