Append a record to the end of a text file: Difference between revisions

→‎{{header|Java}}: code cleanup, consistent indentation
m (remove bogus template markup)
(→‎{{header|Java}}: code cleanup, consistent indentation)
Line 1,380:
=={{header|Java}}==
 
<lang java>import static java.util.Objects.requireNonNull;
<lang java>
import static java.lang.Integer.parseInt;
import static java.nio.file.StandardOpenOption.APPEND;
import static java.util.Arrays.asList;
import static java.util.Arrays.stream;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
 
import java.io.IOException;
Line 1,393 ⟶ 1,386:
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardOpenOption.APPEND;
import static java.util.Arrays.asList;
import static java.util.Arrays.streamCollections;
import java.util.List;
import static java.util.stream.Collectors.joining;
import java.util.stream.Stream;
 
public class RecordAppender {
static class Record {
private final String account;
private final String password;
private final int uid;
private final int gid;
private final List<String> gecos;
private final String directory;
private final String shell;
 
public Record(String account, String password, int uid, int gid, List<String> gecos, String directory, String shell) {
this.account = requireNonNull(account);
this.password = requireNonNull(password);
this.uid = uid;
this.gid = gid;
this.gecos = requireNonNull(gecos);
this.directory = requireNonNull(directory);
this.shell = requireNonNull(shell);
}
 
@Override
public String toString() {
return account + ':' + password + ':' + uid + ':' + gid + ':' + gecosString.stream().collect(joiningjoin(","), gecos) + ':' + directory + ':' + shell;
}
 
public static Record parse(String text) {
String[] tokens = text.split(":");
return new Record(
tokens[0],
tokens[51],
Integer.parseInt(tokens[32]),
Integer.parseInt(tokens[3]),
Arrays.asList(tokens[4].split(",")),
tokens[65]);,
tokens[6]);
};
}
 
public static void main(String[] args) throws IOException {
@Override
public List<String> toString()rawData {= Arrays.asList(
"jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,[email protected]:/home/jsmith:/bin/bash",
return account + ':' + password + ':' + uid + ':' + gid + ':' + gecos.stream().collect(joining(",")) + ':' + directory + ':' + shell;
"jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,[email protected]:/home/jdoe:/bin/bash",
}
"xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,[email protected]:/home/xyz:/bin/bash"
);
public static Record parse(String text) {
 
String[] tokens = text.split(":");
List<Record> records = rawData.stream(rawData).map(Record::parse).collect(Collectors.toList());
return new Record(
 
tokens[0],
Path tmp tokens[1]= Paths.get("_rosetta", ".passwd");
parseIntFiles.createDirectories(tokens[2]tmp.getParent()),;
Files.write(tmp, (Iterable<String>) records.stream().limit(2).map(Record::toString)::iterator);
parseInt(tokens[3]),
 
asList(tokens[4].split(",")),
Files.write(tmp, asListCollections.singletonList(records.get(2).toString()), StandardOpenOption.APPEND);
tokens[5],
 
tokens[6]);
try (Stream<String> lines = Files.lines(tmp)) {
}
lines.map(Record::parse).forEach(System.out::println);
}
}
public static void main(String[] args) throws IOException {
String[] rawData = {
"jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8917,(234)555-0077,[email protected]:/home/jsmith:/bin/bash",
"jdoe:x:1002:1000:Jane Doe,Room 1004,(234)555-8914,(234)555-0044,[email protected]:/home/jdoe:/bin/bash",
"xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,[email protected]:/home/xyz:/bin/bash"
};
List<Record> records = stream(rawData).map(Record::parse).collect(toList());
Path tmp = Paths.get("_rosetta", ".passwd");
Files.createDirectories(tmp.getParent());
Files.write(tmp, (Iterable<String>)records.stream().limit(2).map(Record::toString)::iterator);
Files.write(tmp, asList(records.get(2).toString()), APPEND);
try(Stream<String> lines = Files.lines(tmp)) {
lines.map(Record::parse).forEach(System.out::println);
}
}</lang java>
}
}
</lang>
{{out}}
<pre>Appended Record: xyz:x:1003:1000:X Yz,Room 1003,(234)555-8913,(234)555-0033,xyz@rosettacode.org:/home/xyz:/bin/bash</pre>