AppleSingle API
The AppleCommander AppleSingle API is a reusable component that can be utilized by other Java projects.
Java API Examples
Usage is catered to the factory methods and builder. Some samples are included below.
Read AppleSingle
Use the factory method to...
Reading from standard input:
AppleSingle as = AppleSingle.read(System.in);
Reading from a file:
File file = new File("myfile.as");
AppleSingle as = AppleSingle.read(file);
The AppleSingle file can be read from an InputStream, File, Path, or just a byte array.
Create AppleSingle
Use the builder to create a new AppleSingle file and then save it...
AppleSingle as = AppleSingle.builder()
.dataFork(dataFork)
.realName(realName)
.build();
Path file = Paths.get("mynewfile.as");
as.save(file);
The save(...) method can save to a File, Path, or an OutputStream.
Entries
If the higher-level API is insufficient, the lower-level API does allow either tracking of the processing
(see code for the analyze subcommand) or alternate processing of Entry objects (see the filter
subcommand).
To tap into the AppleSingleReader events, add as many reporters as required. For example, the analyze
command uses these to display the details of the AppleSingle file as it is read:
AppleSingleReader reader = AppleSingleReader.builder(fileData)
.readAtReporter((start,chunk,desc) -> used.add(IntRange.of(start, start + chunk.length)))
.readAtReporter((start,chunk,desc) -> dumper.dump(start, chunk, desc))
.versionReporter(this::reportVersion)
.numberOfEntriesReporter(this::reportNumberOfEntries)
.entryReporter(this::reportEntry)
.build();
To work with the raw Entry objects, use the various AppleSingle#asEntries methods. For instance, the
filter subcommand bypasses the AppleSingle object altogether to implement the filter:
List<Entry> entries = stdinFlag ? AppleSingle.asEntries(System.in) : AppleSingle.asEntries(inputFile);
// ...
AppleSingle.write(outputStream, newEntries);