/* * ASCIIPointImporter.java * * Created on June 29, 2005, 4:28 PM * */ package ika.geoimport; import ika.gui.ProgressIndicator; import java.io.*; import ika.geo.*; import java.util.*; /** * * @author Bernhard Jenny, Institute of Cartography, ETH Zurich. */ public class ASCIIPointImporter extends GeoImporter { /** * Reads an ASCII file with points. First column contains the names, the * second column x coordinates, the third column y coordinates. A line * may contain additional data or columns, which is ignored. */ protected GeoObject importData(java.net.URL url) throws IOException { GeoSet geoSet = this.createGeoSet(); geoSet.setName(ika.utils.FileUtils.getFileNameWithoutExtension(url.getPath())); // count the numbers of read characters and get the size of the file // for progress indication long charsRead = 0; int fileSize = url.openConnection().getContentLength(); BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader (url.openStream())); String str; while ((str = in.readLine()) != null) { charsRead += str.length() + 1; StringTokenizer tokenizer = new StringTokenizer(str, " \t,;"); String name = (String)tokenizer.nextToken(); double x = Double.parseDouble((String)tokenizer.nextToken()); double y = Double.parseDouble((String)tokenizer.nextToken()); GeoPoint point = new GeoPoint(x, y); point.setName(name); geoSet.add(point); // update progress indicator ProgressIndicator progressIndicator = this.getProgressIndicator(); if (progressIndicator != null) { final int percentage = (int)(100d * charsRead / fileSize); progressIndicator.progress(percentage); if (progressIndicator.isAborted()) return null; } } } finally { if (in != null) try { in.close(); } catch (Exception e) {} } return geoSet; } public String getImporterName() { return "ASCII Point Importer"; } /** * Test whether the passed file contains valid data. The first row in * the file must contain a name, x, and y, separated by tab, comma or semicolumn. */ protected java.net.URL findDataURL(java.net.URL url) { if (url == null) return null; BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader (url.openStream())); String str = in.readLine(); if (str == null) return null; StringTokenizer tokenizer = new StringTokenizer(str, " \t,;"); String name = (String)tokenizer.nextToken(); /*double x = */Double.parseDouble((String)tokenizer.nextToken()); /*double y = */Double.parseDouble((String)tokenizer.nextToken()); return url; } catch (Exception e) { return null; } finally { if (in != null) try { in.close(); } catch (IOException e) {} } } }