Java tutorial
/** * Title: Force Field X. * * Description: Force Field X - Software for Molecular Biophysics. * * Copyright: Copyright (c) Michael J. Schnieders 2001-2017. * * This file is part of Force Field X. * * Force Field X is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3 as published by * the Free Software Foundation. * * Force Field X is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA * * Linking this library statically or dynamically with other modules is making a * combined work based on this library. Thus, the terms and conditions of the * GNU General Public License cover the whole combination. * * As a special exception, the copyright holders of this library give you * permission to link this library with independent modules to produce an * executable, regardless of the license terms of these independent modules, and * to copy and distribute the resulting executable under terms of your choice, * provided that you also meet, for each linked independent module, the terms * and conditions of the license of that module. An independent module is a * module which is not derived from or based on this library. If you modify this * library, you may extend this exception to your version of the library, but * you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. */ package ffx.potential.parsers; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import javax.swing.filechooser.FileFilter; import org.apache.commons.io.FilenameUtils; /** * The XYZFileFilter class is used to choose a TINKER Cartesian Coordinate * (*.XYZ) file. * * @author Michael J. Schnieders * @since 1.0 * */ public final class XYZFileFilter extends FileFilter { /** * Public Constructor. */ public XYZFileFilter() { } /** * {@inheritDoc} * * This method return <code>true</code> if the file is a directory or TINKER * Cartesian coordinate (*.XYZ) file. */ @Override public boolean accept(File file) { if (file.isDirectory()) { return true; } String ext = FilenameUtils.getExtension(file.getName()); return ext.toUpperCase().startsWith("XYZ"); } /** * <p> * acceptDeep</p> * * @param file a {@link java.io.File} object. * @return a boolean. */ public boolean acceptDeep(File file) { try { if (file == null || file.isDirectory() || !file.canRead()) { return false; } FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); if (!br.ready()) { return false; } /** * If the first token is not an integer this file is not a TINKER * Cartesian Coordinate File. */ String rawdata = br.readLine(); String header[] = rawdata.trim().split(" +"); if (header == null || header.length == 0) { return false; } try { Integer.parseInt(header[0]); } catch (Exception e) { return false; } /** * If the the first Atom line does not begin with an integer and * contain at least six tokens, this is not a TINKER cartesian * coordinate file. * */ String firstAtom = br.readLine(); if (firstAtom == null) { return false; } br.close(); fr.close(); String data[] = firstAtom.trim().split(" +"); if (data == null || data.length < 6) { return false; } try { Integer.parseInt(data[0]); } catch (Exception e) { return false; } return true; } catch (Exception e) { return true; } } /** * {@inheritDoc} * * Provides a description of the XYZFileFilter. */ @Override public String getDescription() { return new String("TINKER Cartesian Coordinates (*.XYZ)"); } }