Class EntryReader
- include files,
- comments, and
- multi-line entries (paragraphs).
The syntax of each of these is customizable.
Example use:
// EntryReader constructor args are: filename, comment regexp, include regexp
try (EntryReader er = new EntryReader(filename, false, "^#.*", null)) {
for (String line : er) {
...
}
} catch (IOException e) {
System.err.println("Problem reading " + filename + ": " + e.getMessage());
}
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classDescriptor for an entry (record, paragraph, etc.). -
Field Summary
FieldsModifier and TypeFieldDescriptionbooleanIf true, output diagnostics.@MonotonicNonNull @Regex(1) PatternRegular expression that starts a long entry.@MonotonicNonNull PatternSeeentryStartRegex.booleanIf true, then entries are separated by two blank lines rather than one. -
Constructor Summary
ConstructorsConstructorDescriptionEntryReader(@MustCallAlias InputStream in) Create an EntryReader that does not support comments or include directives.EntryReader(@MustCallAlias InputStream in, String filename) Create an EntryReader that uses the default character set and does not support comments or include directives.EntryReader(@MustCallAlias InputStream in, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.EntryReader(@MustCallAlias InputStream in, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.EntryReader(@MustCallAlias InputStream in, String charsetName, String filename) Deprecated.EntryReader(@MustCallAlias InputStream in, String charsetName, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Create an EntryReader that uses the given character set.EntryReader(@MustCallAlias InputStream in, String charsetName, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.EntryReader(@MustCallAlias Reader reader) Create an EntryReader that does not support comments or include directives.EntryReader(@MustCallAlias Reader reader, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Create an EntryReader.EntryReader(@MustCallAlias Reader reader, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.EntryReader(File file) Create an EntryReader that does not support comments or include directives.EntryReader(File file, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Create an EntryReader.EntryReader(File file, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Deprecated.EntryReader(File file, String charsetName) Deprecated.EntryReader(String filename) Create an EntryReader that does not support comments or include directives.EntryReader(String filename, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Create a new EntryReader starting with the specified file.EntryReader(String filename, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Deprecated.EntryReader(String filename, String charsetName) Deprecated.EntryReader(Path path) Create an EntryReader that does not support comments or include directives.EntryReader(Path path, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Create an EntryReader.EntryReader(Path path, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) Deprecated.EntryReader(Path path, String charsetName) Deprecated. -
Method Summary
Modifier and TypeMethodDescription@Nullable EntryReader.EntrygetEntry()Returns the next entry (paragraph) in the file.Returns the current filename.@NonNegative intReturns the current line number in the current file.booleanhasNext()Returns true if there is another line to read.iterator()Returns a line-by-line iterator for this file.static voidSimple usage example.voidmark(int readAheadLimit) next()Returns the next line in the multi-file.voidPuts the specified line back in the input.@GTENegativeOne intread()@IndexOrLow("#1") intread(char[] cbuf, int off, int len) @Nullable StringreadLine()Read a line, ignoring comments and processing includes.voidremove()remove() is not supported.voidreset()voidsetDebug(boolean debug) Set debugging on or off.voidsetEntryStartStop(@Regex(1) String entryStartRegex, @Regex String entryStopRegex) Set the regular expressions for the start and stop of long entries (multiple lines that are read as a group by getEntry()).voidsetEntryStartStop(@Regex(1) Pattern entryStartRegex, Pattern entryStopRegex) Set the regular expressions for the start and stop of long entries (multiple lines that are read as a group by getEntry()).voidsetLineNumber(@NonNegative int lineNumber) Set the current line number in the current file.@NonNegative longskip(long n) Methods inherited from class BufferedReader
close, lines, markSupported, readyMethods inherited from class Reader
nullReader, of, read, read, readAllAsString, readAllLines, transferToMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Iterable
forEach, spliteratorMethods inherited from interface Iterator
forEachRemaining
-
Field Details
-
entryStartRegex
Regular expression that starts a long entry.If the first line of an entry matches this regexp, then the entry is terminated by:
entryStopRegex, another line that matchesentryStartRegex(even not following a newline), or the end of the current file.Otherwise, the first line of an entry does NOT match this regexp (or the regexp is null), in which case the entry is terminated by a blank line or the end of the current file.
-
entryStopRegex
-
twoBlankLines
public boolean twoBlankLinesIf true, then entries are separated by two blank lines rather than one. -
debug
public boolean debugIf true, output diagnostics.
-
-
Constructor Details
-
EntryReader
@MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias InputStream in, String charsetName, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) throws UnsupportedEncodingException Create an EntryReader that uses the given character set.- Parameters:
in- source from which to read entriescharsetName- the character set to usefilename- non-null file name for stream being readtwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
UnsupportedEncodingException- if the charset encoding is not supported- See Also:
-
EntryReader
@Deprecated @MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias InputStream in, String charsetName, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) throws UnsupportedEncodingException Deprecated.Create an EntryReader that uses the given character set.- Parameters:
in- source from which to read entriescharsetName- the character set to usefilename- non-null file name for stream being readcommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
UnsupportedEncodingException- if the charset encoding is not supported- See Also:
-
EntryReader
@Deprecated @MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias InputStream in, String charsetName, String filename) throws UnsupportedEncodingException Deprecated.Create an EntryReader that does not support comments or include directives.- Parameters:
in- the InputStreamcharsetName- the character set to usefilename- the file name- Throws:
UnsupportedEncodingException- if the charset encoding is not supported- See Also:
-
EntryReader
@Deprecated @MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias InputStream in, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.useEntryReader(InputStream,String,String,boolean,String,String), passingUTF_8as the charsetCreate an EntryReader.- Parameters:
in- source from which to read entriesfilename- non-null file name for stream being readtwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name.
-
EntryReader
@Deprecated @MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias InputStream in, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.Create an EntryReader.- Parameters:
in- source from which to read entriesfilename- non-null file name for stream being readcommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name.
-
EntryReader
Create an EntryReader that uses the default character set and does not support comments or include directives.- Parameters:
in- the InputStreamfilename- the file name- See Also:
-
EntryReader
Create an EntryReader that does not support comments or include directives.- Parameters:
in- the InputStream- See Also:
-
EntryReader
@MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias Reader reader, String filename, boolean twoBlankLines, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Create an EntryReader.- Parameters:
reader- source from which to read entriesfilename- file name corresponding to reader, for use in error messagestwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignoredincludeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name
-
EntryReader
@Deprecated @MustCallAlias public EntryReader(@MustCallAlias @MustCallAlias Reader reader, String filename, @Nullable @Regex String commentRegexString, @Nullable @Regex(1) String includeRegexString) Deprecated.Create an EntryReader.- Parameters:
reader- source from which to read entriesfilename- file name corresponding to reader, for use in error messagescommentRegexString- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignoredincludeRegexString- regular expression that matches include directives. The expression should define one group that contains the include file name
-
EntryReader
Create an EntryReader that does not support comments or include directives.- Parameters:
reader- source from which to read entries- See Also:
-
EntryReader
public EntryReader(Path path, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Create an EntryReader.- Parameters:
path- initial file to readtwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegex- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file
-
EntryReader
@Deprecated public EntryReader(Path path, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Deprecated.Create an EntryReader.- Parameters:
path- initial file to readcommentRegex- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file
-
EntryReader
Create an EntryReader that does not support comments or include directives.- Parameters:
path- the file to read- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
Deprecated.Create an EntryReader that does not support comments or include directives.- Parameters:
path- the file to readcharsetName- the character set to use- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
public EntryReader(File file, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Create an EntryReader.- Parameters:
file- initial file to readtwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegex- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file
-
EntryReader
@Deprecated public EntryReader(File file, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Deprecated.Create an EntryReader.- Parameters:
file- initial file to readcommentRegex- regular expression that matches comments. Any text that matches commentRegex is removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file
-
EntryReader
Create an EntryReader that does not support comments or include directives.- Parameters:
file- the file to read- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
Deprecated.Create an EntryReader that does not support comments or include directives.- Parameters:
file- the file to readcharsetName- the character set to use- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
public EntryReader(String filename, boolean twoBlankLines, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Create a new EntryReader starting with the specified file.- Parameters:
filename- initial file to readtwoBlankLines- true if entries are separated by two blank lines rather than onecommentRegex- regular expression that matches comments. Any text that matchescommentRegexis removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
@Deprecated public EntryReader(String filename, @Nullable @Regex String commentRegex, @Nullable @Regex(1) String includeRegex) throws IOException Deprecated.Create a new EntryReader starting with the specified file.- Parameters:
filename- initial file to readcommentRegex- regular expression that matches comments. Any text that matchescommentRegexis removed. A line that is entirely a comment is ignored.includeRegex- regular expression that matches include directives. The expression should define one group that contains the include file name.- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
Create an EntryReader that does not support comments or include directives.- Parameters:
filename- source from which to read entries- Throws:
IOException- if there is a problem reading the file- See Also:
-
EntryReader
Deprecated.Create an EntryReader that does not support comments or include directives.- Parameters:
filename- source from which to read entriescharsetName- the character set to use- Throws:
IOException- if there is a problem reading the file- See Also:
-
-
Method Details
-
getFileName
Returns the current filename.- Returns:
- the current filename
-
getLineNumber
public @NonNegative int getLineNumber(@GuardSatisfied EntryReader this) Returns the current line number in the current file.- Overrides:
getLineNumberin classLineNumberReader- Returns:
- the current line number
-
setLineNumber
public void setLineNumber(@GuardSatisfied EntryReader this, @NonNegative int lineNumber) Set the current line number in the current file.- Overrides:
setLineNumberin classLineNumberReader- Parameters:
lineNumber- new line number for the current file
-
setEntryStartStop
public void setEntryStartStop(@GuardSatisfied EntryReader this, @Regex(1) String entryStartRegex, @Regex String entryStopRegex) Set the regular expressions for the start and stop of long entries (multiple lines that are read as a group by getEntry()).- Parameters:
entryStartRegex- regular expression that starts a long entryentryStopRegex- regular expression that ends a long entry
-
setEntryStartStop
public void setEntryStartStop(@GuardSatisfied EntryReader this, @Regex(1) Pattern entryStartRegex, Pattern entryStopRegex) Set the regular expressions for the start and stop of long entries (multiple lines that are read as a group by getEntry()).- Parameters:
entryStartRegex- regular expression that starts a long entryentryStopRegex- regular expression that ends a long entry
-
setDebug
public void setDebug(boolean debug) Set debugging on or off.- Parameters:
debug- true if debugging is on
-
readLine
Read a line, ignoring comments and processing includes. Returns null at end of file.A line that is completely a comment is ignored (and not returned as a blank line).
- Overrides:
readLinein classLineNumberReader- Returns:
- the string that was read, not including any line termination characters, or null at end of file
- Throws:
IOException
-
iterator
Returns a line-by-line iterator for this file.Warning: This does not return a fresh iterator each time. The iterator is a singleton, the same one is returned each time, and a new one can never be created after it is exhausted.
-
hasNext
public boolean hasNext(@GuardSatisfied EntryReader this) Returns true if there is another line to read. Any IOExceptions are turned into errors (because the definition of hasNext() in Iterator doesn't throw any exceptions). -
next
Returns the next line in the multi-file.- Specified by:
nextin interfaceIterator<String>- Returns:
- the next line in the multi-file
- Throws:
NoSuchElementException- at end of file
-
remove
-
getEntry
Returns the next entry (paragraph) in the file. If no more entries are available, returns null.Entries are separated by one or two blank lines (two, if
twoBlankLinesis true), unless the entry started withentryStartRegex(seesetEntryStartStop(String, String)).- Returns:
- the next entry (paragraph) in the file
- Throws:
IOException- if there is a problem reading the file
-
putback
Puts the specified line back in the input. Only one line can be put back.- Parameters:
line- the line to be put back in the input
-
mark
public void mark(@GuardSatisfied EntryReader this, int readAheadLimit) - Overrides:
markin classLineNumberReader
-
read
public @GTENegativeOne int read(@GuardSatisfied EntryReader this) - Overrides:
readin classLineNumberReader
-
read
public @IndexOrLow("#1") int read(@GuardSatisfied EntryReader this, char[] cbuf, int off, int len) - Overrides:
readin classLineNumberReader
-
reset
public void reset(@GuardSatisfied EntryReader this) - Overrides:
resetin classLineNumberReader
-
skip
public @NonNegative long skip(@GuardSatisfied EntryReader this, long n) - Overrides:
skipin classLineNumberReader
-
main
Simple usage example.- Parameters:
args- command-line arguments: filename [commentRegex [includeRegex]]- Throws:
IOException- if there is a problem reading a file
-
EntryReader(InputStream,String,String,boolean,String,String), passingUTF_8as the charset