获取手机中外置内存卡、内置内存卡、手机内存路径。思路是:先用 Environment.getExternalStorageDirectory()获得外部存储卡路径(某些机型也表现为内部存储卡路径),如没有获 取到有效sd卡插入,则使用安卓的配置文件system/etc/vold.fstab读取全部挂载信息,假如也没有可写入的sd卡,则使用 getFilesDir()方式获得当前应用所在存储路径。为适应不同手机的内存情况,先分三种情况获得可存储路径phonePicsPath,后面代码较长是因为有两个工具类,复制即可,代码如下:


//首先判断是否有外部存储卡,如没有判断是否有内部存储卡,如没有,继续读取应用程序所在存储 
		if(getExternalSdCardPath() != null){ 
			phonePicsPath = getExternalSdCardPath(); 
		}else{ 
			phonePicsPath = getFilesDir().getAbsolutePath(); 
		}


/** 
     * 遍历 "system/etc/vold.fstab” 文件,获取全部的Android的挂载点信息 
     *  
     * @return 
     */ 
    private static ArrayList<String> getDevMountList() { 
        String[] toSearch = FileUtils.readFile("/system/etc/vold.fstab").split(" "); 
        ArrayList<String> out = new ArrayList<String>(); 
        for (int i = 0; i < toSearch.length; i++) { 
            if (toSearch[i].contains("dev_mount")) { 
                if (new File(toSearch[i + 2]).exists()) { 
                    out.add(toSearch[i + 2]); 
                } 
            } 
        } 
        return out; 
    } 
/** 
     * 获取扩展SD卡存储目录 
     *  
     * 如果有外接的SD卡,并且已挂载,则返回这个外置SD卡目录 
     * 否则:返回内置SD卡目录 
     *  
     * @return 
     */ 
    public static String getExternalSdCardPath() { 
  
        if (SDCardUtils.isMounted()) { 
            File sdCardFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); 
            return sdCardFile.getAbsolutePath(); 
        } 
  
        String path = null; 
  
        File sdCardFile = null; 
  
        ArrayList<String> devMountList = getDevMountList(); 
  
        for (String devMount : devMountList) { 
            File file = new File(devMount); 
  
            if (file.isDirectory() && file.canWrite()) { 
                path = file.getAbsolutePath(); 
  
                String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmmss").format(new Date()); 
                File testWritable = new File(path, "test_" + timeStamp); 
  
                if (testWritable.mkdirs()) { 
                    testWritable.delete(); 
                } else { 
                    path = null; 
                } 
            } 
        } 
  
        if (path != null) { 
            sdCardFile = new File(path); 
            return sdCardFile.getAbsolutePath(); 
        } 
  
        return null; 
    }



FileUtils文件:



package com.zqsy.order.tools; 
 
/*** 
 * 文件工具类 
 * @author zhangda 
 * 
 */ 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.util.ArrayList; 
import java.util.List; 
 
import android.text.TextUtils; 
 
/** 
 * File Utils 
 * <ul> 
 * Read or write file 
 * <li>{@link #readFile(String)} read file</li> 
 * <li>{@link #readFileToList(String)} read file to string list</li> 
 * <li>{@link #writeFile(String, String, boolean)} write file from String</li> 
 * <li>{@link #writeFile(String, String)} write file from String</li> 
 * <li>{@link #writeFile(String, List, boolean)} write file from String List</li> 
 * <li>{@link #writeFile(String, List)} write file from String List</li> 
 * <li>{@link #writeFile(String, InputStream)} write file</li> 
 * <li>{@link #writeFile(String, InputStream, boolean)} write file</li> 
 * <li>{@link #writeFile(File, InputStream)} write file</li> 
 * <li>{@link #writeFile(File, InputStream, boolean)} write file</li> 
 * </ul> 
 * <ul> 
 * Operate file 
 * <li>{@link #moveFile(File, File)} or {@link #moveFile(String, String)}</li> 
 * <li>{@link #copyFile(String, String)}</li> 
 * <li>{@link #getFileExtension(String)}</li> 
 * <li>{@link #getFileName(String)}</li> 
 * <li>{@link #getFileNameWithoutExtension(String)}</li> 
 * <li>{@link #getFileSize(String)}</li> 
 * <li>{@link #deleteFile(String)}</li> 
 * <li>{@link #isFileExist(String)}</li> 
 * <li>{@link #isFolderExist(String)}</li> 
 * <li>{@link #makeFolders(String)}</li> 
 * <li>{@link #makeDirs(String)}</li> 
 * </ul> 
 *  
 * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-12 
 */ 
public class FileUtils { 
 
    public final static String FILE_EXTENSION_SEPARATOR = "."; 
 
    private FileUtils() { 
        throw new AssertionError(); 
    } 
 
    /** 
     * read file 
     *  
     * @param filePath 
     * @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>} 
     * @return if file not exist, return null, else return content of file 
     * @throws RuntimeException if an error occurs while operator BufferedReader 
     */ 
    public static String readFile(String filePath) { 
    	String fileContent = ""; 
        File file = new File(filePath); 
        if (file == null || !file.isFile()) { 
            return null; 
        } 
 
        BufferedReader reader = null; 
        try { 
            InputStreamReader is = new InputStreamReader(new FileInputStream(file)); 
            reader = new BufferedReader(is); 
            String line = null; 
            int i = 0; 
            while ((line = reader.readLine()) != null) { 
                fileContent += line + " "; 
            } 
            reader.close(); 
            return fileContent; 
        } catch (IOException e) { 
        	e.printStackTrace(); 
        } finally { 
            if (reader != null) { 
                try { 
                    reader.close(); 
                } catch (IOException e) { 
                	e.printStackTrace(); 
                } 
            } 
        } 
        return fileContent; 
    } 
 
    /** 
     * write file 
     *  
     * @param filePath 
     * @param content 
     * @param append is append, if true, write to the end of file, else clear content of file and write into it 
     * @return return false if content is empty, true otherwise 
     * @throws RuntimeException if an error occurs while operator FileWriter 
     */ 
    public static boolean writeFile(String filePath, String content, boolean append) { 
        if (StringUtils.isEmpty(content)) { 
            return false; 
        } 
 
        FileWriter fileWriter = null; 
        try { 
            makeDirs(filePath); 
            fileWriter = new FileWriter(filePath, append); 
            fileWriter.write(content); 
            fileWriter.close(); 
            return true; 
        } catch (IOException e) { 
            throw new RuntimeException("IOException occurred. ", e); 
        } finally { 
            if (fileWriter != null) { 
                try { 
                    fileWriter.close(); 
                } catch (IOException e) { 
                    throw new RuntimeException("IOException occurred. ", e); 
                } 
            } 
        } 
    } 
 
    /** 
     * write file 
     *  
     * @param filePath 
     * @param contentList 
     * @param append is append, if true, write to the end of file, else clear content of file and write into it 
     * @return return false if contentList is empty, true otherwise 
     * @throws RuntimeException if an error occurs while operator FileWriter 
     */ 
    public static boolean writeFile(String filePath, List<String> contentList, boolean append) { 
        if (contentList == null || contentList.size() == 0) { 
            return false; 
        } 
 
        FileWriter fileWriter = null; 
        try { 
            makeDirs(filePath); 
            fileWriter = new FileWriter(filePath, append); 
            int i = 0; 
            for (String line : contentList) { 
                if (i++ > 0) { 
                    fileWriter.write("\r\n"); 
                } 
                fileWriter.write(line); 
            } 
            fileWriter.close(); 
            return true; 
        } catch (IOException e) { 
            throw new RuntimeException("IOException occurred. ", e); 
        } finally { 
            if (fileWriter != null) { 
                try { 
                    fileWriter.close(); 
                } catch (IOException e) { 
                    throw new RuntimeException("IOException occurred. ", e); 
                } 
            } 
        } 
    } 
 
    /** 
     * write file, the string will be written to the begin of the file 
     *  
     * @param filePath 
     * @param content 
     * @return 
     */ 
    public static boolean writeFile(String filePath, String content) { 
        return writeFile(filePath, content, false); 
    } 
 
    /** 
     * write file, the string list will be written to the begin of the file 
     *  
     * @param filePath 
     * @param contentList 
     * @return 
     */ 
    public static boolean writeFile(String filePath, List<String> contentList) { 
        return writeFile(filePath, contentList, false); 
    } 
 
    /** 
     * write file, the bytes will be written to the begin of the file 
     *  
     * @param filePath 
     * @param stream 
     * @return 
     * @see {@link #writeFile(String, InputStream, boolean)} 
     */ 
    public static boolean writeFile(String filePath, InputStream stream) { 
        return writeFile(filePath, stream, false); 
    } 
 
    /** 
     * write file 
     *  
     * @param file the file to be opened for writing. 
     * @param stream the input stream 
     * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning 
     * @return return true 
     * @throws RuntimeException if an error occurs while operator FileOutputStream 
     */ 
    public static boolean writeFile(String filePath, InputStream stream, boolean append) { 
        return writeFile(filePath != null ? new File(filePath) : null, stream, append); 
    } 
 
    /** 
     * write file, the bytes will be written to the begin of the file 
     *  
     * @param file 
     * @param stream 
     * @return 
     * @see {@link #writeFile(File, InputStream, boolean)} 
     */ 
    public static boolean writeFile(File file, InputStream stream) { 
        return writeFile(file, stream, false); 
    } 
 
    /** 
     * write file 
     *  
     * @param file the file to be opened for writing. 
     * @param stream the input stream 
     * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning 
     * @return return true 
     * @throws RuntimeException if an error occurs while operator FileOutputStream 
     */ 
    public static boolean writeFile(File file, InputStream stream, boolean append) { 
        OutputStream o = null; 
        try { 
            makeDirs(file.getAbsolutePath()); 
            o = new FileOutputStream(file, append); 
            byte data[] = new byte[1024]; 
            int length = -1; 
            while ((length = stream.read(data)) != -1) { 
                o.write(data, 0, length); 
            } 
            o.flush(); 
            return true; 
        } catch (FileNotFoundException e) { 
            throw new RuntimeException("FileNotFoundException occurred. ", e); 
        } catch (IOException e) { 
            throw new RuntimeException("IOException occurred. ", e); 
        } finally { 
            if (o != null) { 
                try { 
                    o.close(); 
                    stream.close(); 
                } catch (IOException e) { 
                    throw new RuntimeException("IOException occurred. ", e); 
                } 
            } 
        } 
    } 
 
    /** 
     * move file 
     *  
     * @param sourceFilePath 
     * @param destFilePath 
     */ 
    public static void moveFile(String sourceFilePath, String destFilePath) { 
        if (TextUtils.isEmpty(sourceFilePath) || TextUtils.isEmpty(destFilePath)) { 
            throw new RuntimeException("Both sourceFilePath and destFilePath cannot be null."); 
        } 
        moveFile(new File(sourceFilePath), new File(destFilePath)); 
    } 
 
    /** 
     * move file 
     *  
     * @param srcFile 
     * @param destFile 
     */ 
    public static void moveFile(File srcFile, File destFile) { 
        boolean rename = srcFile.renameTo(destFile); 
        if (!rename) { 
            copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath()); 
            deleteFile(srcFile.getAbsolutePath()); 
        } 
    } 
 
    /** 
     * copy file 
     *  
     * @param sourceFilePath 
     * @param destFilePath 
     * @return 
     * @throws RuntimeException if an error occurs while operator FileOutputStream 
     */ 
    public static boolean copyFile(String sourceFilePath, String destFilePath) { 
        InputStream inputStream = null; 
        try { 
            inputStream = new FileInputStream(sourceFilePath); 
        } catch (FileNotFoundException e) { 
            throw new RuntimeException("FileNotFoundException occurred. ", e); 
        } 
        return writeFile(destFilePath, inputStream); 
    } 
 
    /** 
     * read file to string list, a element of list is a line 
     *  
     * @param filePath 
     * @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>} 
     * @return if file not exist, return null, else return content of file 
     * @throws RuntimeException if an error occurs while operator BufferedReader 
     */ 
    public static List<String> readFileToList(String filePath, String charsetName) { 
        File file = new File(filePath); 
        List<String> fileContent = new ArrayList<String>(); 
        if (file == null || !file.isFile()) { 
            return null; 
        } 
 
        BufferedReader reader = null; 
        try { 
            InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName); 
            reader = new BufferedReader(is); 
            String line = null; 
            while ((line = reader.readLine()) != null) { 
                fileContent.add(line); 
            } 
            reader.close(); 
            return fileContent; 
        } catch (IOException e) { 
            throw new RuntimeException("IOException occurred. ", e); 
        } finally { 
            if (reader != null) { 
                try { 
                    reader.close(); 
                } catch (IOException e) { 
                    throw new RuntimeException("IOException occurred. ", e); 
                } 
            } 
        } 
    } 
 
    /** 
     * get file name from path, not include suffix 
     *  
     * <pre> 
     *      getFileNameWithoutExtension(null)               =   null 
     *      getFileNameWithoutExtension("")                 =   "" 
     *      getFileNameWithoutExtension("   ")              =   "   " 
     *      getFileNameWithoutExtension("abc")              =   "abc" 
     *      getFileNameWithoutExtension("a.mp3")            =   "a" 
     *      getFileNameWithoutExtension("a.b.rmvb")         =   "a.b" 
     *      getFileNameWithoutExtension("c:\\")              =   "" 
     *      getFileNameWithoutExtension("c:\\a")             =   "a" 
     *      getFileNameWithoutExtension("c:\\a.b")           =   "a" 
     *      getFileNameWithoutExtension("c:a.txt\\a")        =   "a" 
     *      getFileNameWithoutExtension("/home/admin")      =   "admin" 
     *      getFileNameWithoutExtension("/home/admin/a.txt/b.mp3")  =   "b" 
     * </pre> 
     *  
     * @param filePath 
     * @return file name from path, not include suffix 
     * @see 
     */ 
    public static String getFileNameWithoutExtension(String filePath) { 
        if (StringUtils.isEmpty(filePath)) { 
            return filePath; 
        } 
 
        int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); 
        int filePosi = filePath.lastIndexOf(File.separator); 
        if (filePosi == -1) { 
            return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi)); 
        } 
        if (extenPosi == -1) { 
            return filePath.substring(filePosi + 1); 
        } 
        return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1)); 
    } 
 
    /** 
     * get file name from path, include suffix 
     *  
     * <pre> 
     *      getFileName(null)               =   null 
     *      getFileName("")                 =   "" 
     *      getFileName("   ")              =   "   " 
     *      getFileName("a.mp3")            =   "a.mp3" 
     *      getFileName("a.b.rmvb")         =   "a.b.rmvb" 
     *      getFileName("abc")              =   "abc" 
     *      getFileName("c:\\")              =   "" 
     *      getFileName("c:\\a")             =   "a" 
     *      getFileName("c:\\a.b")           =   "a.b" 
     *      getFileName("c:a.txt\\a")        =   "a" 
     *      getFileName("/home/admin")      =   "admin" 
     *      getFileName("/home/admin/a.txt/b.mp3")  =   "b.mp3" 
     * </pre> 
     *  
     * @param filePath 
     * @return file name from path, include suffix 
     */ 
    public static String getFileName(String filePath) { 
        if (StringUtils.isEmpty(filePath)) { 
            return filePath; 
        } 
 
        int filePosi = filePath.lastIndexOf(File.separator); 
        return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1); 
    } 
 
    /** 
     * get folder name from path 
     *  
     * <pre> 
     *      getFolderName(null)               =   null 
     *      getFolderName("")                 =   "" 
     *      getFolderName("   ")              =   "" 
     *      getFolderName("a.mp3")            =   "" 
     *      getFolderName("a.b.rmvb")         =   "" 
     *      getFolderName("abc")              =   "" 
     *      getFolderName("c:\\")              =   "c:" 
     *      getFolderName("c:\\a")             =   "c:" 
     *      getFolderName("c:\\a.b")           =   "c:" 
     *      getFolderName("c:a.txt\\a")        =   "c:a.txt" 
     *      getFolderName("c:a\\b\\c\\d.txt")    =   "c:a\\b\\c" 
     *      getFolderName("/home/admin")      =   "/home" 
     *      getFolderName("/home/admin/a.txt/b.mp3")  =   "/home/admin/a.txt" 
     * </pre> 
     *  
     * @param filePath 
     * @return 
     */ 
    public static String getFolderName(String filePath) { 
 
        if (StringUtils.isEmpty(filePath)) { 
            return filePath; 
        } 
 
        int filePosi = filePath.lastIndexOf(File.separator); 
        return (filePosi == -1) ? "" : filePath.substring(0, filePosi); 
    } 
 
    /** 
     * get suffix of file from path 
     *  
     * <pre> 
     *      getFileExtension(null)               =   "" 
     *      getFileExtension("")                 =   "" 
     *      getFileExtension("   ")              =   "   " 
     *      getFileExtension("a.mp3")            =   "mp3" 
     *      getFileExtension("a.b.rmvb")         =   "rmvb" 
     *      getFileExtension("abc")              =   "" 
     *      getFileExtension("c:\\")              =   "" 
     *      getFileExtension("c:\\a")             =   "" 
     *      getFileExtension("c:\\a.b")           =   "b" 
     *      getFileExtension("c:a.txt\\a")        =   "" 
     *      getFileExtension("/home/admin")      =   "" 
     *      getFileExtension("/home/admin/a.txt/b")  =   "" 
     *      getFileExtension("/home/admin/a.txt/b.mp3")  =   "mp3" 
     * </pre> 
     *  
     * @param filePath 
     * @return 
     */ 
    public static String getFileExtension(String filePath) { 
        if (StringUtils.isBlank(filePath)) { 
            return filePath; 
        } 
 
        int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); 
        int filePosi = filePath.lastIndexOf(File.separator); 
        if (extenPosi == -1) { 
            return ""; 
        } 
        return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1); 
    } 
 
    /** 
     * Creates the directory named by the trailing filename of this file, including the complete directory path required 
     * to create this directory. <br/> 
     * <br/> 
     * <ul> 
     * <strong>Attentions:</strong> 
     * <li>makeDirs("C:\\Users\\Trinea") can only create users folder</li> 
     * <li>makeFolder("C:\\Users\\Trinea\\") can create Trinea folder</li> 
     * </ul> 
     *  
     * @param filePath 
     * @return true if the necessary directories have been created or the target directory already exists, false one of 
     *         the directories can not be created. 
     *         <ul> 
     *         <li>if {@link FileUtils#getFolderName(String)} return null, return false</li> 
     *         <li>if target directory already exists, return true</li> 
     *         <li>return {@link java.io.File#makeFolder}</li> 
     *         </ul> 
     */ 
    public static boolean makeDirs(String filePath) { 
        String folderName = getFolderName(filePath); 
        if (StringUtils.isEmpty(folderName)) { 
            return false; 
        } 
 
        File folder = new File(folderName); 
        return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs(); 
    } 
 
    /** 
     * @param filePath 
     * @return 
     * @see #makeDirs(String) 
     */ 
    public static boolean makeFolders(String filePath) { 
        return makeDirs(filePath); 
    } 
 
    /** 
     * Indicates if this file represents a file on the underlying file system. 
     *  
     * @param filePath 
     * @return 
     */ 
    public static boolean isFileExist(String filePath) { 
        if (StringUtils.isBlank(filePath)) { 
            return false; 
        } 
 
        File file = new File(filePath); 
        return (file.exists() && file.isFile()); 
    } 
 
    /** 
     * Indicates if this file represents a directory on the underlying file system. 
     *  
     * @param directoryPath 
     * @return 
     */ 
    public static boolean isFolderExist(String directoryPath) { 
        if (StringUtils.isBlank(directoryPath)) { 
            return false; 
        } 
 
        File dire = new File(directoryPath); 
        return (dire.exists() && dire.isDirectory()); 
    } 
 
    /** 
     * delete file or directory 
     * <ul> 
     * <li>if path is null or empty, return true</li> 
     * <li>if path not exist, return true</li> 
     * <li>if path exist, delete recursion. return true</li> 
     * <ul> 
     *  
     * @param path 
     * @return 
     */ 
    public static boolean deleteFile(String path) { 
        if (StringUtils.isBlank(path)) { 
            return true; 
        } 
 
        File file = new File(path); 
        if (!file.exists()) { 
            return true; 
        } 
        if (file.isFile()) { 
            return file.delete(); 
        } 
        if (!file.isDirectory()) { 
            return false; 
        } 
        for (File f : file.listFiles()) { 
            if (f.isFile()) { 
                f.delete(); 
            } else if (f.isDirectory()) { 
                deleteFile(f.getAbsolutePath()); 
            } 
        } 
        return file.delete(); 
    } 
 
    /** 
     * get file size 
     * <ul> 
     * <li>if path is null or empty, return -1</li> 
     * <li>if path exist and it is a file, return file size, else return -1</li> 
     * <ul> 
     *  
     * @param path 
     * @return returns the length of this file in bytes. returns -1 if the file does not exist. 
     */ 
    public static long getFileSize(String path) { 
        if (StringUtils.isBlank(path)) { 
            return -1; 
        } 
 
        File file = new File(path); 
        return (file.exists() && file.isFile() ? file.length() : -1); 
    } 
}



StringUtils文件



package com.zqsy.order.tools; 
 
import java.io.UnsupportedEncodingException; 
import java.net.URLEncoder; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
 
/** 
 * String Utils 
 *  
 * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2011-7-22 
 */ 
public class StringUtils { 
 
    private StringUtils() { 
        throw new AssertionError(); 
    } 
 
    /** 
     * is null or its length is 0 or it is made by space 
     *  
     * <pre> 
     * isBlank(null) = true; 
     * isBlank(&quot;&quot;) = true; 
     * isBlank(&quot;  &quot;) = true; 
     * isBlank(&quot;a&quot;) = false; 
     * isBlank(&quot;a &quot;) = false; 
     * isBlank(&quot; a&quot;) = false; 
     * isBlank(&quot;a b&quot;) = false; 
     * </pre> 
     *  
     * @param str 
     * @return if string is null or its size is 0 or it is made by space, return true, else return false. 
     */ 
    public static boolean isBlank(String str) { 
        return (str == null || str.trim().length() == 0); 
    } 
 
    /** 
     * is null or its length is 0 
     *  
     * <pre> 
     * isEmpty(null) = true; 
     * isEmpty(&quot;&quot;) = true; 
     * isEmpty(&quot;  &quot;) = false; 
     * </pre> 
     *  
     * @param str 
     * @return if string is null or its size is 0, return true, else return false. 
     */ 
    public static boolean isEmpty(CharSequence str) { 
        return (str == null || str.length() == 0); 
    } 
 
    /** 
     * compare two string 
     *  
     * @param actual 
     * @param expected 
     * @return 
     * @see ObjectUtils#isEquals(Object, Object) 
     */ 
    public static boolean isEquals(String actual, String expected) { 
    	return actual == expected || (actual == null ? expected == null : actual.equals(expected)); 
    } 
 
    /** 
     * get length of CharSequence 
     *  
     * <pre> 
     * length(null) = 0; 
     * length(\"\") = 0; 
     * length(\"abc\") = 3; 
     * </pre> 
     *  
     * @param str 
     * @return if str is null or empty, return 0, else return {@link CharSequence#length()}. 
     */ 
    public static int length(CharSequence str) { 
        return str == null ? 0 : str.length(); 
    } 
 
    /** 
     * null Object to empty string 
     *  
     * <pre> 
     * nullStrToEmpty(null) = &quot;&quot;; 
     * nullStrToEmpty(&quot;&quot;) = &quot;&quot;; 
     * nullStrToEmpty(&quot;aa&quot;) = &quot;aa&quot;; 
     * </pre> 
     *  
     * @param str 
     * @return 
     */ 
    public static String nullStrToEmpty(Object str) { 
        return (str == null ? "" : (str instanceof String ? (String)str : str.toString())); 
    } 
 
    /** 
     * capitalize first letter 
     *  
     * <pre> 
     * capitalizeFirstLetter(null)     =   null; 
     * capitalizeFirstLetter("")       =   ""; 
     * capitalizeFirstLetter("2ab")    =   "2ab" 
     * capitalizeFirstLetter("a")      =   "A" 
     * capitalizeFirstLetter("ab")     =   "Ab" 
     * capitalizeFirstLetter("Abc")    =   "Abc" 
     * </pre> 
     *  
     * @param str 
     * @return 
     */ 
    public static String capitalizeFirstLetter(String str) { 
        if (isEmpty(str)) { 
            return str; 
        } 
 
        char c = str.charAt(0); 
        return (!Character.isLetter(c) || Character.isUpperCase(c)) ? str : new StringBuilder(str.length()) 
                .append(Character.toUpperCase(c)).append(str.substring(1)).toString(); 
    } 
 
    /** 
     * encoded in utf-8 
     *  
     * <pre> 
     * utf8Encode(null)        =   null 
     * utf8Encode("")          =   ""; 
     * utf8Encode("aa")        =   "aa"; 
     * utf8Encode("啊啊啊啊")   = "%E5%95%8A%E5%95%8A%E5%95%8A%E5%95%8A"; 
     * </pre> 
     *  
     * @param str 
     * @return 
     * @throws UnsupportedEncodingException if an error occurs 
     */ 
    public static String utf8Encode(String str) { 
        if (!isEmpty(str) && str.getBytes().length != str.length()) { 
            try { 
                return URLEncoder.encode(str, "UTF-8"); 
            } catch (UnsupportedEncodingException e) { 
                throw new RuntimeException("UnsupportedEncodingException occurred. ", e); 
            } 
        } 
        return str; 
    } 
 
    /** 
     * encoded in utf-8, if exception, return defultReturn 
     *  
     * @param str 
     * @param defultReturn 
     * @return 
     */ 
    public static String utf8Encode(String str, String defultReturn) { 
        if (!isEmpty(str) && str.getBytes().length != str.length()) { 
            try { 
                return URLEncoder.encode(str, "UTF-8"); 
            } catch (UnsupportedEncodingException e) { 
                return defultReturn; 
            } 
        } 
        return str; 
    } 
 
    /** 
     * get innerHtml from href 
     *  
     * <pre> 
     * getHrefInnerHtml(null)                                  = "" 
     * getHrefInnerHtml("")                                    = "" 
     * getHrefInnerHtml("mp3")                                 = "mp3"; 
     * getHrefInnerHtml("&lt;a innerHtml&lt;/a&gt;")                    = "&lt;a innerHtml&lt;/a&gt;"; 
     * getHrefInnerHtml("&lt;a&gt;innerHtml&lt;/a&gt;")                    = "innerHtml"; 
     * getHrefInnerHtml("&lt;a&lt;a&gt;innerHtml&lt;/a&gt;")                    = "innerHtml"; 
     * getHrefInnerHtml("&lt;a href="baidu.com"&gt;innerHtml&lt;/a&gt;")               = "innerHtml"; 
     * getHrefInnerHtml("&lt;a href="baidu.com" title="baidu"&gt;innerHtml&lt;/a&gt;") = "innerHtml"; 
     * getHrefInnerHtml("   &lt;a&gt;innerHtml&lt;/a&gt;  ")                           = "innerHtml"; 
     * getHrefInnerHtml("&lt;a&gt;innerHtml&lt;/a&gt;&lt;/a&gt;")                      = "innerHtml"; 
     * getHrefInnerHtml("jack&lt;a&gt;innerHtml&lt;/a&gt;&lt;/a&gt;")                  = "innerHtml"; 
     * getHrefInnerHtml("&lt;a&gt;innerHtml1&lt;/a&gt;&lt;a&gt;innerHtml2&lt;/a&gt;")        = "innerHtml2"; 
     * </pre> 
     *  
     * @param href 
     * @return <ul> 
     *         <li>if href is null, return ""</li> 
     *         <li>if not match regx, return source</li> 
     *         <li>return the last string that match regx</li> 
     *         </ul> 
     */ 
    public static String getHrefInnerHtml(String href) { 
        if (isEmpty(href)) { 
            return ""; 
        } 
 
        String hrefReg = ".*<[\\s]*a[\\s]*.*>(.+?)<[\\s]*/a[\\s]*>.*"; 
        Pattern hrefPattern = Pattern.compile(hrefReg, Pattern.CASE_INSENSITIVE); 
        Matcher hrefMatcher = hrefPattern.matcher(href); 
        if (hrefMatcher.matches()) { 
            return hrefMatcher.group(1); 
        } 
        return href; 
    } 
 
/** 
     * process special char in html 
     *  
     * <pre> 
     * htmlEscapeCharsToString(null) = null; 
     * htmlEscapeCharsToString("") = ""; 
     * htmlEscapeCharsToString("mp3") = "mp3"; 
     * htmlEscapeCharsToString("mp3&lt;") = "mp3<"; 
     * htmlEscapeCharsToString("mp3&gt;") = "mp3\>"; 
     * htmlEscapeCharsToString("mp3&amp;mp4") = "mp3&mp4"; 
     * htmlEscapeCharsToString("mp3&quot;mp4") = "mp3\"mp4"; 
     * htmlEscapeCharsToString("mp3&lt;&gt;&amp;&quot;mp4") = "mp3\<\>&\"mp4"; 
     * </pre> 
     *  
     * @param source 
     * @return 
     */ 
    public static String htmlEscapeCharsToString(String source) { 
        return StringUtils.isEmpty(source) ? source : source.replaceAll("&lt;", "<").replaceAll("&gt;", ">") 
                .replaceAll("&amp;", "&").replaceAll("&quot;", "\""); 
    } 
 
    /** 
     * transform half width char to full width char 
     *  
     * <pre> 
     * fullWidthToHalfWidth(null) = null; 
     * fullWidthToHalfWidth("") = ""; 
     * fullWidthToHalfWidth(new String(new char[] {12288})) = " "; 
     * fullWidthToHalfWidth("!"#$%&) = "!\"#$%&"; 
     * </pre> 
     *  
     * @param s 
     * @return 
     */ 
    public static String fullWidthToHalfWidth(String s) { 
        if (isEmpty(s)) { 
            return s; 
        } 
 
        char[] source = s.toCharArray(); 
        for (int i = 0; i < source.length; i++) { 
            if (source[i] == 12288) { 
                source[i] = ' '; 
                // } else if (source[i] == 12290) { 
                // source[i] = '.'; 
            } else if (source[i] >= 65281 && source[i] <= 65374) { 
                source[i] = (char)(source[i] - 65248); 
            } else { 
                source[i] = source[i]; 
            } 
        } 
        return new String(source); 
    } 
 
    /** 
     * transform full width char to half width char 
     *  
     * <pre> 
     * halfWidthToFullWidth(null) = null; 
     * halfWidthToFullWidth("") = ""; 
     * halfWidthToFullWidth(" ") = new String(new char[] {12288}); 
     * halfWidthToFullWidth("!\"#$%&) = "!"#$%&"; 
     * </pre> 
     *  
     * @param s 
     * @return 
     */ 
    public static String halfWidthToFullWidth(String s) { 
        if (isEmpty(s)) { 
            return s; 
        } 
 
        char[] source = s.toCharArray(); 
        for (int i = 0; i < source.length; i++) { 
            if (source[i] == ' ') { 
                source[i] = (char)12288; 
                // } else if (source[i] == '.') { 
                // source[i] = (char)12290; 
            } else if (source[i] >= 33 && source[i] <= 126) { 
                source[i] = (char)(source[i] + 65248); 
            } else { 
                source[i] = source[i]; 
            } 
        } 
        return new String(source); 
    } 
}



发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

android广播监听短信并显示内容详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。