001 /*
002 * The contents of this file are subject to the Mozilla Public
003 * License Version 1.1 (the "License"); you may not use this file
004 * except in compliance with the License. You may obtain a copy of
005 * the License at http://www.mozilla.org/MPL/
006 *
007 * Software distributed under the License is distributed on an "AS
008 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
009 * implied. See the License for the specific language governing
010 * rights and limitations under the License.
011 *
012 * The Original Code is Knowtator.
013 *
014 * The Initial Developer of the Original Code is University of Colorado.
015 * Copyright (C) 2005 - 2008. All Rights Reserved.
016 *
017 * Knowtator was developed by the Center for Computational Pharmacology
018 * (http://compbio.uchcs.edu) at the University of Colorado Health
019 * Sciences Center School of Medicine with support from the National
020 * Library of Medicine.
021 *
022 * Current information about Knowtator can be obtained at
023 * http://knowtator.sourceforge.net/
024 *
025 * Contributor(s):
026 * Philip V. Ogren <philip@ogren.info> (Original Author)
027 */
028
029 package edu.uchsc.ccp.knowtator.textsource.files;
030
031 import java.io.BufferedReader;
032 import java.io.File;
033 import java.io.FileInputStream;
034 import java.io.IOException;
035 import java.io.InputStream;
036 import java.io.InputStreamReader;
037 import java.nio.charset.Charset;
038
039 import edu.uchsc.ccp.knowtator.textsource.DefaultTextSource;
040 import edu.uchsc.ccp.knowtator.textsource.TextSourceAccessException;
041
042 public class FileTextSource extends DefaultTextSource {
043
044 public static final String CLS_NAME = "file text source";
045
046 protected File file;
047
048 protected Charset charset;
049
050 /**
051 * The name of the file with the rootPath prefix removed is the name of the
052 * FileTextSource. For example, if file.getPath is
053 * "/home/pogren/my_text.txt" and rootPath is "/home/pogren", then the name
054 * of the text source is my_text.txt. Typically file.getPath() == rootPath +
055 * "/"+ name.
056 */
057
058 public FileTextSource(File file, String rootPath, Charset charset) {
059 this.file = file;
060 this.charset = charset;
061
062 name = file.getPath();
063 if (rootPath.endsWith("" + File.separatorChar) || rootPath.equals("")) {
064 name = name.substring(rootPath.length());
065 } else
066 name = name.substring(rootPath.length() + 1);
067 protegeClsName = CLS_NAME;
068 }
069
070 public File getFile() {
071 return file;
072 }
073
074 public String getText() throws TextSourceAccessException {
075 try {
076 return readFile(new FileInputStream(file), charset);
077 } catch (IOException ioe) {
078 throw new TextSourceAccessException(ioe);
079 }
080 }
081
082 public static String readFile(InputStream inputStream, Charset charset) throws IOException {
083 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, charset));
084 StringBuffer contents = new StringBuffer();
085
086 String line = new String();
087 while ((line = reader.readLine()) != null) {
088 contents.append(line + "\n");
089 }
090 return contents.toString();
091 }
092
093 }