1 package prefuse.util.io; 2 3 import java.awt.Component ; 4 import java.io.File ; 5 import java.io.FileInputStream ; 6 import java.io.IOException ; 7 import java.io.InputStream ; 8 import java.net.URL ; 9 import java.util.logging.Logger ; 10 import java.util.zip.GZIPInputStream ; 11 12 import javax.swing.JFileChooser ; 13 14 import prefuse.data.Graph; 15 import prefuse.data.Table; 16 import prefuse.data.io.CSVTableReader; 17 import prefuse.data.io.DelimitedTextTableReader; 18 import prefuse.data.io.GraphMLReader; 19 import prefuse.data.io.GraphReader; 20 import prefuse.data.io.TableReader; 21 import prefuse.data.io.TreeMLReader; 22 import prefuse.util.StringLib; 23 import prefuse.util.collections.ByteArrayList; 24 25 30 public class IOLib { 31 32 private IOLib() { 33 } 35 36 43 public static boolean isUrlString(String s) { 44 return s.startsWith("http:/") || 45 s.startsWith("ftp:/") || 46 s.startsWith("file:/"); 47 } 48 49 60 public static URL urlFromString(String location) { 61 return urlFromString(location, null, true); 62 } 63 64 81 public static URL urlFromString(String location, Class referrer, 82 boolean includeFileSystem) 83 { 84 URL url = null; 85 if ( isUrlString(location) ) { 86 try { 88 url = new URL (location); 89 } catch ( Exception e ) { 90 e.printStackTrace(); 91 } 92 } else { 93 if ( referrer != null ) 95 url = referrer.getResource(location); 96 else 97 url = IOLib.class.getResource(location); 98 99 if ( url == null && !location.startsWith("/") ) 100 url = IOLib.class.getResource("/"+location); 101 102 if ( includeFileSystem && url == null ) { 103 if ( (new File (location)).exists() ) { 105 try { 106 url = new URL ("file:///"+location); 107 } catch ( Exception e ) {} 108 } 109 } 110 } 111 return url; 112 } 113 114 125 public static InputStream streamFromString(String location) 126 throws IOException  127 { 128 InputStream is = null; 129 130 URL url = urlFromString(location, null, false); 132 if ( url != null ) { 133 is = url.openStream(); 134 } else { 135 File f = new File (location); 137 if ( f.exists() ) 138 is = new FileInputStream (f); 139 } 140 141 if ( is == null ) { 142 return null; } else if ( isGZipFile(location) ) { 144 return new GZIPInputStream (is); 145 } else { 146 return is; 147 } 148 } 149 150 155 public static String getExtension(File f) { 156 return (f != null ? getExtension(f.getName()) : null); 157 } 158 159 165 public static boolean isGZipFile(String file) { 166 String ext = getExtension(file); 167 return "gz".equals(ext) || "z".equals(ext); 168 } 169 170 176 public static boolean isZipFile(String file) { 177 return "zip".equals(getExtension(file)); 178 } 179 180 185 public static String getExtension(String filename) { 186 int i = filename.lastIndexOf('.'); 187 if ( i>0 && i<filename.length()-1 ) { 188 return filename.substring(i+1).toLowerCase(); 189 } else { 190 return null; 191 } 192 } 193 194 200 public static ByteArrayList readAsBytes(InputStream is) throws IOException { 201 ByteArrayList buf = new ByteArrayList(); 202 byte[] b = new byte[8192]; 203 int nread = -1; 204 while ( (nread=is.read(b)) >= 0 ) { 205 buf.add(b, 0, nread); 206 } 207 return buf; 208 } 209 210 216 public static String readAsString(InputStream is) throws IOException { 217 StringBuffer buf = new StringBuffer (); 218 byte[] b = new byte[8192]; 219 int nread = -1; 220 while ( (nread=is.read(b)) >= 0 ) { 221 String s = new String (b, 0, nread); 222 buf.append(s); 223 } 224 return buf.toString(); 225 } 226 227 237 public static String readAsString(String location) throws IOException { 238 return readAsString(streamFromString(location)); 239 } 240 241 243 248 public static Table getTableFile(Component c) { 249 JFileChooser jfc = new JFileChooser (); 250 jfc.setDialogType(JFileChooser.OPEN_DIALOG); 251 jfc.setDialogTitle("Open Table File"); 252 jfc.setAcceptAllFileFilterUsed(false); 253 254 SimpleFileFilter ff; 255 256 259 ff = new SimpleFileFilter("csv", 261 "Comma Separated Values (CSV) File (*.csv)", 262 new CSVTableReader()); 263 ff.addExtension("gz"); 264 jfc.setFileFilter(ff); 265 266 ff = new SimpleFileFilter("txt", 268 "Pipe-Delimited Text File (*.txt)", 269 new DelimitedTextTableReader("|")); 270 ff.addExtension("gz"); 271 jfc.setFileFilter(ff); 272 273 ff = new SimpleFileFilter("txt", 275 "Tab-Delimited Text File (*.txt)", 276 new DelimitedTextTableReader()); 277 ff.addExtension("gz"); 278 jfc.setFileFilter(ff); 279 280 int retval = jfc.showOpenDialog(c); 281 if (retval != JFileChooser.APPROVE_OPTION) 282 return null; 283 284 File f = jfc.getSelectedFile(); 285 ff = (SimpleFileFilter)jfc.getFileFilter(); 286 TableReader tr = (TableReader)ff.getUserData(); 287 288 try { 289 return tr.readTable(streamFromString(f.getAbsolutePath())); 290 } catch ( Exception e ) { 291 Logger.getLogger(IOLib.class.getName()).warning( 292 e.getMessage() + "\n" + StringLib.getStackTrace(e)); 293 return null; 294 } 295 } 296 297 302 public static Graph getGraphFile(Component c) { 303 JFileChooser jfc = new JFileChooser (); 304 jfc.setDialogType(JFileChooser.OPEN_DIALOG); 305 jfc.setDialogTitle("Open Graph or Tree File"); 306 jfc.setAcceptAllFileFilterUsed(false); 307 308 SimpleFileFilter ff; 309 310 313 ff = new SimpleFileFilter("xml", 315 "TreeML File (*.xml, *.treeml)", 316 new TreeMLReader()); 317 ff.addExtension("treeml"); 318 ff.addExtension("gz"); 319 jfc.setFileFilter(ff); 320 321 ff = new SimpleFileFilter("xml", 323 "GraphML File (*.xml, *.graphml)", 324 new GraphMLReader()); 325 ff.addExtension("graphml"); 326 ff.addExtension("gz"); 327 jfc.setFileFilter(ff); 328 329 int retval = jfc.showOpenDialog(c); 330 if (retval != JFileChooser.APPROVE_OPTION) 331 return null; 332 333 File f = jfc.getSelectedFile(); 334 ff = (SimpleFileFilter)jfc.getFileFilter(); 335 GraphReader gr = (GraphReader)ff.getUserData(); 336 337 try { 338 return gr.readGraph(streamFromString(f.getAbsolutePath())); 339 } catch ( Exception e ) { 340 Logger.getLogger(IOLib.class.getName()).warning( 341 e.getMessage() + "\n" + StringLib.getStackTrace(e)); 342 return null; 343 } 344 } 345 346 } | Popular Tags |