The attached class contains a custom task that will do the trick. The javadoc explains how to use it.
Gerard On Wednesday 19 January 2005 16:36, Dick, Brian E. wrote: > I need to remove the extension from a file name. The basename task > almost works when specifying the suffix attribute. However, I don't know > the value of the suffix. > > Does anyone know how I can remove the extension (suffix) from a file > name? > > Later, > BEDick > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED]
/* * THIS SOFTWARE IS PROVIDED AS IS AND ANY EXPRESSED OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GREEN * LIGHT CONSULTANCY B.V. OR ITS CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Lib $ */ package nl.glc.tools.ant.classname; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * Title: ClassName<br> * Description: This task can accept the following attributes: Sets a property to the class name of a specified * file, optionally minus a suffix. * * <ul> * <li> * file * </li> * <li> * property * </li> * <li> * suffix * </li> * <li> * prefix * </li> * <li> * separator * </li> * </ul> * * The <b>file</b> and <b>property</b> attributes are required. The <b>suffix</b> attribute can be * specified either with or without the ".", and the result will be the same (ie., the * returned file name will be minus the .suffix). * * <p> * When this task executes, it will set the specified property to the value of the last element in * the specified file. If file is a directory, the classname will be the last directory element. * If file is a full-path filename, the basename will be the simple file name. If a suffix is * specified, and the specified file ends in that suffix, the basename will be the simple file * name without the suffix. If a prefix is specified, and the specified file contains the prefix, * the classname will be the file name without everything preceding and including the * prefix. If "\"es occur in the resulting classname, they will be substituted for * "/"es. * If separator is specified, instead of substituting all "\"es for "/"es, all * "\"es <b>AND</b> all "/"es will be substituted for the separator. * </p> * Copyright: Copyright (c) 2004<br> * Company: GLC eProfessionals B.V.<br> * * @author Jan R. Zeinstra * @version $Id $ */ public class ClassName extends Task { //~ Methods ···················································································· /** * file or directory to get base name from * * @param aFile file or directory to get base name from */ public void setFile(File aFile) { this.theFile = aFile; } /** * Property to set base name to. * * @param aProperty name of property */ public void setProperty(String aProperty) { this.theProperty = aProperty; } /** * Optional suffix to remove from base name. * * @param aSuffix suffix to remove from base name */ public void setSuffix(String aSuffix) { this.theSuffix = aSuffix; } /** * Optional prefix to remove from classname. * * @param aPrefix aPrefix to remove from classname */ public void setPrefix(String aPrefix) { this.thePrefix = aPrefix; } /** * Optional separator to use for separating path entries in the classname. * * @param aSeparator separator to use */ public void setSeparator(String aSeparator) { this.theSeparator = aSeparator; } /** * do the work * * @throws BuildException if required attributes are not supplied property and attribute are * required attributes */ public void execute() throws BuildException { if (theProperty == null) { throw new BuildException("property attribute required", getLocation()); } if (theFile == null) { throw new BuildException("file attribute required", getLocation()); } String myValue = null; if(thePrefix == null) { myValue = theFile.getName(); } else { myValue = theFile.getAbsolutePath(); int myPrefixIndex = myValue.indexOf(thePrefix); if(myPrefixIndex!=-1) { myValue = myValue.substring(myPrefixIndex + thePrefix.length()); } else { myValue = theFile.getName(); } } if ((theSuffix != null) && myValue.endsWith(theSuffix)) { // if the suffix does not starts with a '.' and the // char preceding the suffix is a '.', we assume the user // wants to remove the '.' as well (see docs) int pos = myValue.length() - theSuffix.length(); if ((pos > 0) && (theSuffix.charAt(0) != '.') && (myValue.charAt(pos - 1) == '.')) { pos--; } myValue = myValue.substring(0, pos); if(theSeparator == null) { myValue = myValue.replaceAll("\\\\","/"); if(myValue.startsWith("/")) { myValue = myValue.substring(1); } } else { myValue = myValue.replaceAll("\\\\",theSeparator); myValue = myValue.replaceAll("/",theSeparator); if(myValue.startsWith(theSeparator)) { myValue = myValue.substring(1); } } } getProject().setNewProperty(theProperty, myValue); } //~ Instance variables ········································································· private File theFile; private String theProperty; private String theSuffix; private String thePrefix; private String theSeparator; } /* * Formatted according to GLC Coding Convention. */
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]