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 }