package jomora.io;

import java.net.URI;

/**
 * java.io.Fileクラスを拡張したクラス。
 * 主に、ファイル拡張子を扱うメソッドが追加されている。
 * @author jomora@jomora.info
 * @version 2006.05.05 コメント追加(CheckStyle,FindBugs対応)
 */
public class File extends java.io.File {

    /**
     * 直列化ID。
     */
    private static final long serialVersionUID = -7378511302399827604L;

    /**
     * スーパークラスからのコンストラクタ。
     * @param pathname ファイルパス
     */
    public File(String pathname) {
        super(pathname);
    }
    /**
     * スーパークラスからのコンストラクタ。
     * @param uri URI
     */
    public File(URI uri) {
        super(uri);
    }
    /**
     * スーパークラスからのコンストラクタ。
     * @param parent 親フォルダ
     * @param child 子ファイル
     */
    public File(java.io.File parent, String child) {
        super(parent, child);
    }
    /**
     * スーパークラスからのコンストラクタ。
     * @param parent 親フォルダ
     * @param child 子ファイル
     */
    public File(String parent, String child) {
        super(parent, child);
    }

    /**
     * ファイル名を取得する。
     * @param filename 拡張子付のファイル名
     * @return 拡張子付のファイル名
     */
    public static String getName(String filename) {
        return new File(filename).getName();
    }

    /**
     * 拡張子無しのファイル名を取得する。
     * @return  拡張子を省いたファイル名
     */
    public final String getNameWithoutExtension() {
        String filename = this.getName();
        return getNameWithoutExtension(filename);
    }

    /**
     * 拡張子無しのファイル名を取得する。
     * @param filename 拡張子付のファイル名
     * @return 拡張子を省いたファイル名
     */
    public static String getNameWithoutExtension(String filename) {
        filename = new File(filename).getName();
        int i = filename.lastIndexOf('.');
        if (i > 0 && i < filename.length() - 1) {
            return filename.substring(0, i);
        }
        return filename;
    }

    /**
     * 拡張子を取得する。
     * @return  拡張子
     */
    public final String getExtension() {
        String filename = this.getName();
        return getExtension(filename);
    }

    /**
     * 拡張子を取得する。
     * @param filename 拡張子付のファイル名
     * @return 拡張子
     */
    public static String getExtension(String filename) {
        int i = filename.lastIndexOf('.');
        if (i > 0 && i < filename.length() - 1) {
            return filename.substring(i + 1);
        }
        return "";
    }

}
