Skip to content

Commit bd3526b

Browse files
GH-5395 Change console convert, export, verify to use OutputStreams when writing (#5399)
2 parents 1b9f670 + d6ae748 commit bd3526b

6 files changed

Lines changed: 48 additions & 9 deletions

File tree

tools/console/src/main/java/org/eclipse/rdf4j/console/command/Convert.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
package org.eclipse.rdf4j.console.command;
1212

1313
import java.io.BufferedInputStream;
14-
import java.io.BufferedWriter;
14+
import java.io.BufferedOutputStream;
1515
import java.io.IOException;
1616
import java.nio.file.Files;
1717
import java.nio.file.Path;
@@ -132,7 +132,7 @@ private void convert(String fileFrom, String fileTo) {
132132
String baseURI = pathFrom.toUri().toString();
133133

134134
try (BufferedInputStream r = new BufferedInputStream(Files.newInputStream(pathFrom));
135-
BufferedWriter w = Files.newBufferedWriter(pathTo)) {
135+
BufferedOutputStream w = new BufferedOutputStream(Files.newOutputStream(pathTo))) {
136136
RDFWriter writer = Rio.createWriter(fmtTo.get(), w);
137137
parser.setRDFHandler(writer);
138138

@@ -141,6 +141,8 @@ private void convert(String fileFrom, String fileTo) {
141141

142142
parser.parse(r, baseURI);
143143

144+
w.flush();
145+
144146
long diff = (System.nanoTime() - startTime) / 1_000_000;
145147
writeln("Data has been written to file (" + diff + " ms)");
146148
} catch (IOException | RDFParseException | RDFHandlerException e) {

tools/console/src/main/java/org/eclipse/rdf4j/console/command/Export.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.console.command;
1212

13-
import java.io.IOException;
14-
import java.io.Writer;
15-
import java.nio.charset.StandardCharsets;
13+
import java.io.*;
1614
import java.nio.file.Files;
1715
import java.nio.file.Path;
1816
import java.nio.file.StandardOpenOption;
@@ -127,8 +125,8 @@ private void export(Repository repository, String fileName, Resource... contexts
127125
}
128126

129127
try (RepositoryConnection conn = repository.getConnection();
130-
Writer w = Files.newBufferedWriter(path, StandardCharsets.UTF_8, StandardOpenOption.CREATE,
131-
StandardOpenOption.TRUNCATE_EXISTING)) {
128+
BufferedOutputStream w = new BufferedOutputStream(Files.newOutputStream(path, StandardOpenOption.CREATE,
129+
StandardOpenOption.TRUNCATE_EXISTING))) {
132130

133131
RDFFormat fmt = Rio.getWriterFormatForFileName(fileName)
134132
.orElseThrow(() -> new UnsupportedRDFormatException("No RDF parser for " + fileName));
@@ -139,6 +137,8 @@ private void export(Repository repository, String fileName, Resource... contexts
139137

140138
conn.export(writer, contexts);
141139

140+
w.flush();
141+
142142
long diff = (System.nanoTime() - startTime) / 1_000_000;
143143
writeln("Data has been written to file (" + diff + " ms)");
144144
} catch (IOException | UnsupportedRDFormatException e) {

tools/console/src/main/java/org/eclipse/rdf4j/console/command/Verify.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.console.command;
1212

13+
import java.io.BufferedOutputStream;
1314
import java.io.IOException;
1415
import java.io.InputStream;
15-
import java.io.Writer;
1616
import java.net.MalformedURLException;
1717
import java.net.URL;
1818
import java.nio.file.Files;
@@ -279,8 +279,9 @@ private void writeReport(Model model, String reportFile) {
279279

280280
RDFFormat format = Rio.getParserFormatForFileName(reportFile).orElse(RDFFormat.TURTLE);
281281

282-
try (Writer w = Files.newBufferedWriter(Paths.get(reportFile))) {
282+
try (BufferedOutputStream w = new BufferedOutputStream(Files.newOutputStream(Paths.get(reportFile)))) {
283283
Rio.write(model, w, format, cfg);
284+
w.flush();
284285
} catch (IOException ex) {
285286
writeError("Could not write report to " + reportFile, ex);
286287
}

tools/console/src/test/java/org/eclipse/rdf4j/console/command/ConvertTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public final void testConvert() {
6666
assertTrue(o != null, "Invalid JSON");
6767
}
6868

69+
@Test
70+
public final void testConvertToBinary() {
71+
File binary = new File(locationFile, "alien.brf");
72+
cmd.execute("convert", from.getAbsolutePath(), binary.getAbsolutePath());
73+
74+
assertTrue(binary.length() > 0, "File is empty");
75+
}
76+
6977
@Test
7078
public final void testConvertWorkDir() {
7179
setWorkingDir(cmd);

tools/console/src/test/java/org/eclipse/rdf4j/console/command/ExportTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ public final void testExportAll() throws RepositoryException, IOException {
6868
nq.delete();
6969
}
7070

71+
@Test
72+
public final void testExportAllToBinary() throws RepositoryException {
73+
File binary = new File(locationFile, "all.brf");
74+
cmd.execute("export", binary.getAbsolutePath());
75+
assertTrue(binary.length() > 0, "File is empty");
76+
77+
binary.delete();
78+
}
79+
7180
@Test
7281
public final void testExportWorkDir() throws RepositoryException, IOException {
7382
setWorkingDir(cmd);

tools/console/src/test/java/org/eclipse/rdf4j/console/command/VerifyTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,25 @@ public final void testShaclValidFormat() throws IOException {
146146
assertFalse(io.wasErrorWritten());
147147
}
148148

149+
@Test
150+
public final void testShaclInvalidToBinary() throws IOException {
151+
File report = new File(locationFile, "testShaclInvalid.brf");
152+
cmd.execute("verify", copyFromRes("ok.ttl"), copyFromRes("shacl_invalid.ttl"), report.toString());
153+
assertTrue(io.wasErrorWritten());
154+
assertTrue(Files.size(report.toPath()) > 0);
155+
}
156+
157+
@Test
158+
public final void testShaclValidToBinary() throws IOException {
159+
File report = new File(locationFile, "testShaclValid.brf");
160+
assertTrue(report.createNewFile());
161+
cmd.execute("verify", copyFromRes("ok.ttl"), copyFromRes("shacl_valid.ttl"), report.toString());
162+
163+
verify(mockConsoleIO, never()).writeError(anyString());
164+
assertFalse(Files.size(report.toPath()) > 0);
165+
assertFalse(io.wasErrorWritten());
166+
}
167+
149168
@Test
150169
public final void testShaclValidWorkDir() throws IOException {
151170
setWorkingDir(cmd);

0 commit comments

Comments
 (0)