package rene.util;
import java.io.File;
/**
This is a static class to determine extensions etc. from a file name.
*/
public class FileName
{ static public int ChopLength=48;
static public String purefilename (String filename)
{ char a[]=filename.toCharArray();
int i=a.length-1;
char fs=File.separatorChar;
while (i>=0)
{ if (a[i]==fs || a[i]=='/' || i==0)
{ if (i==0) i=-1;
if (i<a.length-1)
{ int j=a.length-1;
while (j>i && a[j]!='.') j--;
if (j>i+1) return new String(a,i+1,j-i-1);
else return "";
}
else return "";
}
i--;
}
return filename;
}
static public String path (String filename)
{ char a[]=filename.toCharArray();
int i=a.length-1;
char fs=File.separatorChar;
while (i>0)
{ if (a[i]==fs || a[i]=='/')
{ return new String(a,0,i);
}
i--;
}
return "";
}
static public String pathAndSeparator (String filename)
{ char a[]=filename.toCharArray();
int i=a.length-1;
char fs=File.separatorChar;
while (i>0)
{ if (a[i]==fs || a[i]=='/')
{ return new String(a,0,i+1);
}
i--;
}
return "";
}
static public String filename (String filename)
{ char a[]=filename.toCharArray();
int i=a.length-1;
char fs=File.separatorChar;
while (i>0)
{ if (a[i]==fs || a[i]=='/')
{ if (i+1<a.length) return new String(a,i+1,a.length-i-1);
else return "";
}
i--;
}
return filename;
}
static public String extension (String filename)
{ char a[]=filename.toCharArray();
int i=a.length-1;
char fs=File.separatorChar;
while (i>0)
{ if (a[i]=='.')
{ if (i+1<a.length) return new String(a,i+1,a.length-i-1);
else return "";
}
if (a[i]==fs || a[i]=='/') break;
i--;
}
return "";
}
static public String chop (String filename, int chop)
// chop the filename to 32 characters
{ if (filename.length()>chop)
{ filename="... "+filename.substring(filename.length()-chop);
}
return filename;
}
static public String chop (String filename)
{ return chop(filename,ChopLength);
}
static public String chop (int start, String filename, int chop)
// chop the filename.substring(start) to 32 characters
{ if (filename.length()>start+chop)
{ filename=filename.substring(0,start)+
" ... "+
filename.substring(filename.length()-chop);
}
return filename;
}
static public String chop (int start, String filename)
{ return chop(start,filename,ChopLength);
}
static public String relative (String dir, String filename)
{ dir=dir+System.getProperty("file.separator");
if (filename.startsWith(dir))
{ return filename.substring(dir.length());
}
else return filename;
}
static public String canonical (String filename)
{ File f=new File(filename);
try
{ String s=f.getCanonicalPath();
if (s.length()>2 && s.charAt(1)==':')
s=s.substring(0,2).toLowerCase()+s.substring(2);
return s;
}
catch (Exception e) { return f.getAbsolutePath(); }
}
static public String toURL (String filename)
{ int n=filename.indexOf(' ');
if (n>=0)
return filename.substring(0,n)+"%20"+toURL(filename.substring(n+1));
else
return filename;
}
static boolean match (char filename[], int n, char filter[], int m)
{ if (filter==null) return true;
if (m>=filter.length) return n>=filename.length;
if (n>=filename.length) return m==filter.length-1 && filter[m]=='*';
if (filter[m]=='?')
{ return match(filename,n+1,filter,m+1);
}
if (filter[m]=='*')
{ if (m==filter.length-1) return true;
for (int i=n; i<filename.length; i++)
{ if (match(filename,i,filter,m+1)) return true;
}
return false;
}
if (filter[m]==filename[n]) return match(filename,n+1,filter,m+1);
return false;
}
public static boolean match (String filename, String filter)
{ char fn[]=filename.toCharArray(),f[]=filter.toCharArray();
return match(fn,0,f,0);
}
public static void main (String args[])
{ System.out.println("-"+toURL(" test test test ")+"-");
}
}