1 package baseCode.io.reader;
2
3 import java.io.BufferedReader;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.io.InputStreamReader;
9 import java.util.HashMap;
10 import java.util.HashSet;
11 import java.util.Map;
12 import java.util.Set;
13 import java.util.StringTokenizer;
14
15 /***
16 * Reads a tab-delimited file with lines of the format Key Value. If there are multiple values, then a Set is created
17 * for each key containing its values.
18 * </p>
19 * <p>
20 * Copyright (c) 2004
21 * </p>
22 * <p>
23 * Institution: Columbia University
24 * </p>
25 *
26 * @author Paul Pavlidis
27 * @version $Id: MapReader.java,v 1.2 2004/07/27 03:18:58 pavlidis Exp $
28 */
29 public class MapReader {
30
31 /***
32 * @param filename String
33 * @throws IOException
34 * @return Map
35 */
36 public Map read( String filename ) throws IOException {
37 return this.read( filename, false );
38 }
39
40 /***
41 * @param stream InputStream
42 * @return @throws IOException
43 * @throws IOException
44 */
45 public Map read( InputStream stream ) throws IOException {
46 return this.read( stream, false );
47 }
48
49 /***
50 * @param filename name of the tab-delimited file
51 * @param hasHeader boolean
52 * @return Map from the file.
53 * @throws IOException
54 */
55 public Map read( String filename, boolean hasHeader ) throws IOException {
56 File infile = new File( filename );
57 if ( !infile.exists() || !infile.canRead() ) {
58 throw new IllegalArgumentException( "Could not read from " + filename );
59 }
60 FileInputStream stream = new FileInputStream( infile );
61 return read( stream, hasHeader );
62
63 }
64
65 /***
66 * @param stream InputStream
67 * @param hasHeader boolean
68 * @return @throws IOException
69 * @throws IOException
70 */
71 public Map read( InputStream stream, boolean hasHeader ) throws IOException {
72 Map result = new HashMap();
73
74 BufferedReader dis = new BufferedReader( new InputStreamReader( stream ) );
75 if ( hasHeader ) {
76 dis.readLine();
77 }
78
79 String row;
80 while ( ( row = dis.readLine() ) != null ) {
81 StringTokenizer st = new StringTokenizer( row, "\t" );
82 String key = st.nextToken();
83
84 String value = st.nextToken();
85
86 if ( st.hasMoreTokens() ) {
87 Set innerList = new HashSet();
88 innerList.add( value );
89 while ( st.hasMoreTokens() ) {
90 value = st.nextToken();
91 }
92 innerList.add( value );
93 result.put( key, innerList );
94 } else {
95 result.put( key, value );
96 }
97 }
98 dis.close();
99
100 return result;
101 }
102 }