diff --git a/java/read/AsciiOnlyFileContents.java b/java/read/AsciiOnlyFileContents.java new file mode 100644 index 0000000..a1e01de --- /dev/null +++ b/java/read/AsciiOnlyFileContents.java @@ -0,0 +1,17 @@ +package read; + +import java.util.Objects; + +public class AsciiOnlyFileContents implements FileContents { + + private final FileContents original; + + public AsciiOnlyFileContents(final FileContents original) { + this.original = Objects.requireNonNull(original); + } + + @Override + public String asString() { + return this.original.asString().replaceAll("[^\\u0000-\\u007F]+", ""); + } +} diff --git a/java/read/ConcreteFileContents.java b/java/read/ConcreteFileContents.java new file mode 100644 index 0000000..503bd13 --- /dev/null +++ b/java/read/ConcreteFileContents.java @@ -0,0 +1,37 @@ +package read; + +import java.io.*; +import java.nio.file.Path; +import java.util.Iterator; +import java.util.Objects; + +public class ConcreteFileContents implements FileContents { + + private final File file; + + public ConcreteFileContents(final Path path) { + this(path.toFile()); + } + + public ConcreteFileContents(final String file) { + this(new File(file)); + } + + public ConcreteFileContents(final File file) { + this.file = Objects.requireNonNull(file); + } + + @Override + public String asString() { + final StringBuilder result = new StringBuilder(); + try (final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(this.file)))) { + final Iterator lines = reader.lines().iterator(); + while (lines.hasNext()) { + result.append(lines.next()); + } + } catch (IOException e) { + throw new UncheckedIOException(e); + } + return result.toString(); + } +} diff --git a/java/read/FileContents.java b/java/read/FileContents.java new file mode 100644 index 0000000..5b6e3bd --- /dev/null +++ b/java/read/FileContents.java @@ -0,0 +1,6 @@ +package read; + +public interface FileContents { + + String asString(); +} diff --git a/java/write/WriteStringToFile.java b/java/write/WriteStringToFile.java new file mode 100644 index 0000000..e1f7f5a --- /dev/null +++ b/java/write/WriteStringToFile.java @@ -0,0 +1,36 @@ +package write; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Path; +import java.util.Objects; + +public class WriteStringToFile implements WriteToFile { + + private final File file; + private final String value; + + public WriteStringToFile(final Path path, final String value) { + this(path.toFile(), value); + } + + public WriteStringToFile(final String file, final String value) { + this(new File(file), value); + } + + public WriteStringToFile(final File file, final String value) { + this.file = Objects.requireNonNull(file); + this.value = Objects.requireNonNull(value); + } + + @Override + public void write() { + try (final FileWriter fileWriter = new FileWriter(this.file)) { + fileWriter.write(this.value); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } +} diff --git a/java/write/WriteToFile.java b/java/write/WriteToFile.java new file mode 100644 index 0000000..3eedfc9 --- /dev/null +++ b/java/write/WriteToFile.java @@ -0,0 +1,7 @@ +package write; + +public interface WriteToFile { + + void write(); + +}