package org.ansj.dic.impl; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.SequenceInputStream; import java.util.Vector; import org.ansj.dic.PathToStream; import org.ansj.exception.LibraryException; import org.nlpcn.commons.lang.util.logging.Log; import org.nlpcn.commons.lang.util.logging.LogFactory; /** * 将文件转换为流 file://c:/dic.txt * * @author ansj * */ public class File2Stream extends PathToStream { private static final Log LOG = LogFactory.getLog(File2Stream.class); @Override public InputStream toStream(String path) { LOG.info("path to stream " + path); if (path.startsWith("file://")) { path = path.substring(7); } File file = new File(path); if (file.exists() && file.canRead()) { try { if (file.isDirectory()) { return multiple(path); } else { return new FileInputStream(file); } } catch (Exception e) { throw new LibraryException(e); } } throw new LibraryException(" path :" + path + " file:" + file.getAbsolutePath() + " not found or can not to read"); } private InputStream multiple(String path) throws FileNotFoundException { File[] libs = new File[0]; File file = new File(path); if (file.exists() && file.canRead()) { if (file.isFile()) { libs = new File[1]; libs[0] = file; } else if (file.isDirectory()) { File[] files = file.listFiles(new FileFilter() { @Override public boolean accept(File file) { return file.canRead() && !file.isHidden() && !file.isDirectory(); } }); if (files != null && files.length > 0) { libs = files; } } } if (libs.length == 0) { throw new LibraryException("not find any file in path : " + path); } if (libs.length == 1) { return new FileInputStream(libs[0]); } Vector<InputStream> vector = new Vector<>(libs.length); for (int i = 0; i < libs.length; i++) { vector.add(new FileInputStream(libs[i])); } return new SequenceInputStream(vector.elements()); } }