001 // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org)
002 // The Molly framework is freely distributable under the terms of an
003 // MIT-style license. For details, see the molly pages web site at:
004 // http://www.mollypages.org/. Use, modify, have fun !
005
006 package fc.io;
007
008 import java.io.*;
009 import java.util.*;
010 import java.util.regex.*;
011 import java.lang.reflect.*;
012 import fc.util.*;
013
014 /**
015 Extends the {@link java.io.BufferedReader#readLine readLine} functionality of {@link java.io.BufferedReader BufferedReader} by ignoring any commented and empty lines.
016 <p>
017 <ul>
018 <li>comments start with <code>#</code> or <code>//</code></li>
019 <li>empty lines consist of only 0 or more whitespace</li>
020 </ul>
021 **/
022 public class CommentedFileReader extends BufferedReader
023 {
024 private static final boolean dbg = false;
025
026 /**
027 Reads from the specified Reader
028
029 @throws IOException on error reading from the file
030 */
031 public CommentedFileReader(Reader r) throws IOException
032 {
033 super(r);
034 }
035
036 /**
037 Reads from the specified file, using UTF-8 encoding.
038
039 @throws IOException on error reading from the file
040 */
041 public CommentedFileReader(File f) throws IOException
042 {
043 super(new InputStreamReader(new FileInputStream(f), "UTF-8"));
044 }
045
046 public String readLine() throws IOException
047 {
048 String line = super.readLine();
049
050 while (shouldSkip(line)) {
051 if (dbg) System.out.println("Skipping: " + line);
052 line = super.readLine();
053 }
054
055 return line;
056 }
057
058 protected boolean shouldSkip(String line)
059 {
060 //don't skip null, caller can then return null instead
061 if (line == null)
062 return false;
063
064 String trimline = line.trim();
065
066 return trimline.length() == 0
067 || trimline.startsWith("#")
068 || trimline.startsWith("//");
069 }
070
071 public static void main (String args[]) throws IOException
072 {
073 Args myargs = new Args(args);
074 String filestr = myargs.getRequired("file");
075 CommentedFileReader cr = new CommentedFileReader(new File(filestr));
076 String line = null;
077 while ((line = cr.readLine()) != null) {
078 System.out.println(line);
079 }
080 }
081 }