/* Copyright 2006 Rene Grothmann, modified by Eric Hakenholz This file is part of C.a.R. software. C.a.R. is a free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. C.a.R. 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 this program. If not, see . */ 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(final String filename) { final char a[] = filename.toCharArray(); int i = a.length - 1; final 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(final String filename) { final char a[] = filename.toCharArray(); int i = a.length - 1; final 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(final String filename) { final char a[] = filename.toCharArray(); int i = a.length - 1; final 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(final String filename) { final char a[] = filename.toCharArray(); int i = a.length - 1; final 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(final String filename) { final char a[] = filename.toCharArray(); int i = a.length - 1; final 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, final int chop) // chop the filename to 32 characters { if (filename.length() > chop) { filename = "... " + filename.substring(filename.length() - chop); } return filename; } static public String chop(final String filename) { return chop(filename, ChopLength); } static public String chop(final int start, String filename, final 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(final int start, final String filename) { return chop(start, filename, ChopLength); } static public String relative(String dir, final String filename) { dir = dir + System.getProperty("file.separator"); if (filename.startsWith(dir)) { return filename.substring(dir.length()); } else return filename; } static public String canonical(final String filename) { final 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 (final Exception e) { return f.getAbsolutePath(); } } static public String toURL(final String filename) { final int n = filename.indexOf(' '); if (n >= 0) return filename.substring(0, n) + "%20" + toURL(filename.substring(n + 1)); else return filename; } static boolean match(final char filename[], final int n, final char filter[], final 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(final String filename, final String filter) { final char fn[] = filename.toCharArray(), f[] = filter.toCharArray(); return match(fn, 0, f, 0); } public static void main(final String args[]) { System.out.println("-" + toURL(" test test test ") + "-"); } }