Java开发常用Util工具类-StringUtil、CastUtil、CollectionUtil、ArrayUtil、PropsUtil详解编程语言

字符串工具类

StringUtil.java

package com.***.util; 
 
/** 
 * StringUtil 
 * @description: 字符串工具类 
 **/ 
public class StringUtil { 
 
    /** 
     * 判断是否为空字符串最优代码 
     * @param str 
     * @return 如果为空,则返回true 
     */ 
    public static boolean isEmpty(String str){ 
        return str == null || str.trim().length() == 0; 
    } 
 
    /** 
     * 判断字符串是否非空 
     * @param str 如果不为空,则返回true 
     * @return 
     */ 
    public static boolean isNotEmpty(String str){ 
        return !isEmpty(str); 
    } 
}

数据类型转换类

CastUtil.java

package com.***.util; 
 
/** 
 * CastUtil 
 * @description: 数据转型工具类 
 **/ 
public class CastUtil { 
    /**  
    * @Description: 转为String类型 
    * @Param: [obj]  
    * @return: java.lang.String 如果参数为null则转为空字符串 
    */  
    public static String castString(Object obj){ 
        return CastUtil.castString(obj,""); 
    } 
 
    /**  
    * @Description: 转为String类型(提供默认值) 
    * @Param: [obj, defaultValue] 将obj转为string,如果obj为null则返回default 
    * @return: String 
    */  
    public static String castString(Object obj,String defaultValue){ 
        return obj!=null?String.valueOf(obj):defaultValue; 
    } 
 
    /**  
    * @Description: 转为double类型,如果为null或者空字符串或者格式不对则返回0 
    * @Param: [obj]  
    * @return: String 
    */  
    public static double castDouble(Object obj){ 
        return CastUtil.castDouble(obj,0); 
    } 
 
    /**  
    * @Description: 转为double类型 ,如果obj为null或者空字符串或者格式不对则返回defaultValue 
    * @Param: [obj, defaultValue]  
    * @return: String obj为null或者空字符串或者格式不对返回defaultValue 
    */  
    public static double castDouble(Object obj,double defaultValue){ 
        double value = defaultValue;  //声明结果,把默认值赋给结果 
        if (obj!=null){   //判断是否为null 
            String strValue = castString(obj);  //转换为String 
            if (StringUtil.isNotEmpty(strValue)){   //判断字符串是否为空(是否为空只能判断字符串,不能判断Object) 
                try{ 
                    value = Double.parseDouble(strValue);  //不为空则把值赋给value 
                }catch (NumberFormatException e){ 
                    value = defaultValue;  //格式不对把默认值赋给value 
                } 
 
            } 
        } 
        return value; 
    } 
 
    /** 
     * 转为long型,如果obj为null或者空字符串或者格式不对则返回0 
     * @param obj 
     * @return 
     */ 
    public static long castLong(Object obj){ 
        return CastUtil.castLong(obj,0); 
    } 
 
    /** 
     * 转为long型(提供默认数值),如果obj为null或者空字符串或者格式不对则返回defaultValue 
     * @param obj 
     * @param defaultValue 
     * @return obj为null或者空字符串或者格式不对返回defaultValue 
     */ 
    public static long castLong(Object obj,long defaultValue){ 
        long value = defaultValue;  //声明结果,把默认值赋给结果 
        if (obj!=null){   //判断是否为null 
            String strValue = castString(obj);  //转换为String 
            if (StringUtil.isNotEmpty(strValue)){   //判断字符串是否为空(是否为空只能判断字符串,不能判断Object) 
                try{ 
                    value = Long.parseLong(strValue);  //不为空则把值赋给value 
                }catch (NumberFormatException e){ 
                    value = defaultValue;  //格式不对把默认值赋给value 
                } 
 
            } 
        } 
        return value; 
    } 
 
    /** 
     * 转为int型 
     * @param obj 
     * @return 如果obj为null或者空字符串或者格式不对则返回0 
     */ 
    public static int castInt(Object obj){ 
        return CastUtil.castInt(obj,0); 
    } 
 
    /** 
     * 转为int型(提供默认值) 
     * @param obj 
     * @param defaultValue 
     * @return 如果obj为null或者空字符串或者格式不对则返回defaultValue 
     */ 
    public static int castInt(Object obj,int defaultValue){ 
        int value = defaultValue;  //声明结果,把默认值赋给结果 
        if (obj!=null){   //判断是否为null 
            String strValue = castString(obj);  //转换为String 
            if (StringUtil.isNotEmpty(strValue)){   //判断字符串是否为空(是否为空只能判断字符串,不能判断Object) 
                try{ 
                    value = Integer.parseInt(strValue);  //不为空则把值赋给value 
                }catch (NumberFormatException e){ 
                    value = defaultValue;  //格式不对把默认值赋给value 
                } 
 
            } 
        } 
        return value; 
    } 
 
    /** 
     * 转为boolean型,不是true的返回为false 
     * @param obj 
     * @return 
     */ 
    public static boolean castBoolean(Object obj){ 
        return CastUtil.castBoolean(obj,false); 
    } 
 
 
    /** 
     * 转为boolean型(提供默认值) 
     * @param obj 
     * @param defaultValue 
     * @return 
     */ 
    public static boolean castBoolean(Object obj,boolean defaultValue){ 
        boolean value = defaultValue; 
        if (obj!=null){  //为null则返回默认值 
            value = Boolean.parseBoolean(castString(obj));  //底层会把字符串和true对比,所以不用判断是否为空字符串 
        } 
        return value; 
    } 
}

集合工具类

CollectionUtil.java

package com.***.util; 
 
import org.apache.commons.collections4.CollectionUtils; 
import org.apache.commons.collections4.MapUtils; 
import java.util.Collection; 
import java.util.Map; 
 
/** 
 * CollectionUtil 
 * @description: 集合工具类 
 **/ 
public class CollectionUtil { 
    /** 
     * 判断collection是否为空 
     * @param collection 
     * @return 
     */ 
    public static boolean isEmpty(Collection<?> collection){ 
        //return CollectionUtils.isEmpty(collection); 
        return collection == null || collection.isEmpty(); 
    } 
 
    /** 
     * 判断Collection是否非空 
     * @return 
     */ 
    public static boolean isNotEmpty(Collection<?> collection){ 
        return !isEmpty(collection); 
    } 
 
    /** 
     * 判断map是否为空 
     * @param map 
     * @return 
     */ 
    public static boolean isEmpty(Map<?,?> map){ 
        //return MapUtils.isEmpty(map); 
        return map == null || map.isEmpty(); 
    } 
 
    /** 
     * 判断map是否非 
     * @param map 
     * @return 
     */ 
    public static boolean isNotEmpty(Map<?,?> map){ 
        return !isEmpty(map); 
    } 
}

数组工具类

ArrayUtil.java

/** 
 * 数组工具类 
 */ 
public class ArrayUtil { 
    /** 
     * 判断数组是否为空 
     * @param array 
     * @return 
     */ 
    public static boolean isNotEmpty(Object[] array){ 
        return !isEmpty(array); 
    } 
 
    /** 
     * 判断数组是否非空 
     * @param array 
     * @return 
     */ 
    public static boolean isEmpty(Object[] array){ 
        return array==null||array.length==0; 
    } 
}

Properties文件操作类

PropsUtil.java

package com.***.util; 
 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.Properties; 
 
/** 
 * 属性文件工具类 
 */ 
public class PropsUtil { 
    private static final Logger LOGGER = LoggerFactory.getLogger(PropsUtil.class); 
 
    /** 
     * 加载属性文件 
     * @param fileName fileName一定要在class下面及java根目录或者resource跟目录下 
     * @return 
     */ 
    public static Properties loadProps(String fileName){ 
        Properties props = new Properties(); 
        InputStream is = null; 
        try { 
            //将资源文件加载为流 
            is = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
props.load(is);
if(is==null){ throw new FileNotFoundException(fileName+"file is not Found"); } } catch (FileNotFoundException e) { LOGGER.error("load properties file filure",e); }finally { if(is !=null){ try { is.close(); } catch (IOException e) { LOGGER.error("close input stream failure",e); } } } return props; } /** * 获取字符型属性(默认值为空字符串) * @param props * @param key * @return */ public static String getString(Properties props,String key){ return getString(props,key,""); } /** * 获取字符型属性(可制定默认值) * @param props * @param key * @param defaultValue 当文件中无此key对应的则返回defaultValue * @return */ public static String getString(Properties props,String key,String defaultValue){ String value = defaultValue; if (props.containsKey(key)){ value = props.getProperty(key); } return value; } /** * 获取数值型属性(默认值为0) * @param props * @param key * @return */ public static int getInt(Properties props,String key){ return getInt(props,key,0); } /** * 获取数值型属性(可指定默认值) * @param props * @param key * @param defaultValue * @return */ public static int getInt(Properties props,String key,int defaultValue){ int value = defaultValue; if (props.containsKey(key)){ value = CastUtil.castInt(props.getProperty(key)); } return value; } /** * 获取布尔型属性(默认值为false) * @param props * @param key * @return */ public static boolean getBoolean(Properties props,String key){ return getBoolean(props,key,false); } /** * 获取布尔型属性(可指定默认值) * @param props * @param key * @param defaultValue * @return */ public static boolean getBoolean(Properties props,String key,Boolean defaultValue){ boolean value = defaultValue; if (props.containsKey(key)){ value = CastUtil.castBoolean(props.getProperty(key)); } return value; } }

用到的maven坐标

        <!--slf4j--> 
        <dependency> 
            <groupId>org.slf4j</groupId> 
            <artifactId>slf4j-log4j12</artifactId> 
            <version>1.7.9</version> 
        </dependency>

常用流操作工具类

 StreamUtil.java

public class StreamUtil { 
    private static final Logger LOGGER = LoggerFactory.getLogger(StreamUtil.class); 
 
    /** 
     * 从输入流中获取字符串 
     * @param is 
     * @return 
     */ 
    public static String getString(InputStream is){ 
        StringBuilder sb = new StringBuilder(); 
        try { 
            BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
            String line; 
            while((line=reader.readLine())!=null){ 
                sb.append(line); 
            } 
        } catch (IOException e) { 
            LOGGER.error("get string failure",e); 
            throw new RuntimeException(e); 
        } 
        return sb.toString(); 
    } 
 
}

编码工具类

public class CodecUtil { 
    private static final Logger LOGGER = LoggerFactory.getLogger(CodecUtil.class); 
 
    /** 
     * 将URL编码 
     */ 
    public static String encodeURL(String source){ 
        String target; 
        try { 
            target = URLEncoder.encode(source,"utf-8"); 
        } catch (UnsupportedEncodingException e) { 
            LOGGER.error("encode url failure",e); 
            throw new RuntimeException(e); 
            //e.printStackTrace(); 
        } 
        return target; 
    } 
 
    /** 
     * 将URL解码 
     */ 
    public static String dencodeURL(String source){ 
        String target; 
        try { 
            target = URLDecoder.decode(source,"utf-8"); 
        } catch (UnsupportedEncodingException e) { 
            LOGGER.error("encode url failure",e); 
            throw new RuntimeException(e); 
            //e.printStackTrace(); 
        } 
        return target; 
    } 
}

Json工具类

package org.smart4j.framework.util; 
 
import com.fasterxml.jackson.core.JsonProcessingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
 
import java.io.IOException; 
 
/** 
 * @program: JsonUtil 
 * @description: JSON工具类 
 * @author: Created by QiuYu 
 * @create: 2018-10-24 15:55 
 */ 
 
public class JsonUtil { 
    private static final Logger LOGGER = LoggerFactory.getLogger(JsonUtil.class); 
 
    private static final ObjectMapper OBJECT_MAPPER =new ObjectMapper(); 
 
    /** 
     * 将POJO转换为JSON 
     */ 
    public static <T> String toJson(T obj){ 
        String json; 
        try { 
            json = OBJECT_MAPPER.writeValueAsString(obj); 
        } catch (JsonProcessingException e) { 
            LOGGER.error("convert POJO to JSON failure",e); 
            throw new RuntimeException(e); 
            //e.printStackTrace(); 
        } 
        return json; 
    } 
 
    /** 
     * 将JSON转为POJO 
     */ 
    public static <T> T fromJson(String json,Class<T> type){ 
        T pojo; 
        try { 
            pojo = OBJECT_MAPPER.readValue(json,type); 
        } catch (IOException e) { 
            LOGGER.error("convert JSON to POJO failure",e); 
            throw new RuntimeException(e); 
            //e.printStackTrace(); 
        } 
        return pojo; 
 
    } 
}

日期工具类

DataUtil.java

     /** 
      * 根据年月获取当月最后一天 
      * @param yearmonth yyyy-MM 
      * @return yyyy-MM-dd 
      * @throws ParseException 
      */ 
     public static String getLastDayOfMonth(String yearmonth) { 
         try { 
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); 
             Date dd = format.parse(yearmonth); 
             Calendar cal = Calendar.getInstance(); 
             cal.setTime(dd); 
             int cc=cal.getActualMaximum(Calendar.DAY_OF_MONTH); 
             String result = yearmonth+"-"+cc; 
             return result; 
        } catch (ParseException e) { 
            e.printStackTrace(); 
        } 
        return null; 
     }

时间戳工具类

    /**  
     * 时间戳转换成日期格式字符串  
     * @param seconds 精确到秒的字符串  
     * @param formatStr 为null时默认yyyy-MM-dd HH:mm:ss 
     * @return 返回日期字符串 
     */   
    public static String timeStamp2Date(String seconds,String format) {   
        if(seconds == null || seconds.isEmpty() || seconds.equals("null")){   
            return "";   
        } 
         
        if(format == null || format.isEmpty()){ 
            format = "yyyy-MM-dd HH:mm:ss"; 
        }    
        SimpleDateFormat sdf = new SimpleDateFormat(format); 
        //Date是精确到毫秒的13位时间戳,所以秒要*1000 
        Date date = new Date(Long.valueOf(seconds+"000")); 
        String dateString = sdf.format(date); 
        return dateString;   
    } 
 
    /**  
     * 日期格式字符串转换成时间戳  
     * @param date 字符串日期  
     * @param format 默认:yyyy-MM-dd HH:mm:ss  
     * @return 精确到秒的时间戳 
     */ 
    public static String date2TimeStamp(String date_str,String format){   
        if(format == null || format.isEmpty()){ 
            format = "yyyy-MM-dd HH:mm:ss"; 
        } 
        try {   
            SimpleDateFormat sdf = new SimpleDateFormat(format);   
            return String.valueOf(sdf.parse(date_str).getTime()/1000);   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
        return "";   
    } 
 
    /**  
     * 取得当前时间戳(精确到秒)  
     * @return  
     */   
    public static String getNowTimeStamp(){   
        long time = System.currentTimeMillis(); 
        String timestamp = String.valueOf(time/1000);   
        return timestamp;   
    }

精度计算工具类

DoubleTool.java

package com.gmtx.system.tools; 
 
import java.io.Serializable; 
import java.math.BigDecimal; 
import java.math.RoundingMode; 
 
/** 
 * @ClassName: DoubleTool 
 * @Description: java类精确计算小数 
 * double的计算不精确,会有类似0.0000000000000002的误差,正确的方法是使用BigDecimal或者用整型,整型地方法适合于货币精度已知的情况,比如12.11+1.10转成1211+110计算,最后再/100即可 
 * @author 秋雨 
 * 修改历史  
 *  序号------原因------修改人---日期--- 
 *   1.                                
 *   2.                                 
 */ 
public class DoubleTool implements Serializable { 
    private static final long serialVersionUID = -3345205828566485102L; 
    //默认除法运算精度 
    private static final Integer DEF_DIV_SCALE = 2; 
 
    /** 
     * 提供精确的加法运算。 
     * @param value1 被加数 
     * @param value2 加数 
     * @return 两个参数的和 
     */ 
    public static Double add(Double value1, Double value2) { 
        BigDecimal b1 = new BigDecimal(Double.toString(value1)); 
        BigDecimal b2 = new BigDecimal(Double.toString(value2)); 
        return b1.add(b2).doubleValue(); 
    } 
 
    /** 
     * 提供精确的减法运算。 
     * @param value1 被减数 
     * @param value2 减数 
     * @return 两个参数的差 
     */ 
    public static double sub(Double value1, Double value2) { 
        BigDecimal b1 = new BigDecimal(Double.toString(value1)); 
        BigDecimal b2 = new BigDecimal(Double.toString(value2)); 
        return b1.subtract(b2).doubleValue(); 
    } 
 
    /** 
     * 提供精确的乘法运算。 
     * @param value1 被乘数 
     * @param value2 乘数 
     * @return 两个参数的积 
     */ 
    public static Double mul(Double value1, Double value2) { 
        BigDecimal b1 = new BigDecimal(Double.toString(value1)); 
        BigDecimal b2 = new BigDecimal(Double.toString(value2)); 
        return b1.multiply(b2).doubleValue(); 
    } 
 
    /** 
     * 提供(相对)精确的除法运算,当发生除不尽的情况时, 精确到小数点以后10位,以后的数字四舍五入。 
     * @param dividend 被除数 
     * @param divisor  除数 
     * @return 两个参数的商 
     */ 
    public static Double divide(Double dividend, Double divisor) { 
        return divide(dividend, divisor, DEF_DIV_SCALE); 
    } 
 
    /** 
     * 提供(相对)精确的除法运算。 当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入。 
     * @param dividend 被除数 
     * @param divisor  除数 
     * @param scale    表示表示需要精确到小数点以后几位。 
     * @return 两个参数的商 
     */ 
    public static Double divide(Double dividend, Double divisor, Integer scale) { 
        if (scale < 0) { 
            throw new IllegalArgumentException("The scale must be a positive integer or zero"); 
        } 
        BigDecimal b1 = new BigDecimal(Double.toString(dividend)); 
        BigDecimal b2 = new BigDecimal(Double.toString(divisor)); 
        return b1.divide(b2, scale,RoundingMode.HALF_UP).doubleValue(); 
    } 
 
    /** 
     * 提供指定数值的(精确)小数位四舍五入处理。 
     * @param value 需要四舍五入的数字 
     * @param scale 小数点后保留几位 
     * @return 四舍五入后的结果 
     */ 
    public static double round(double value,int scale){ 
        if(scale<0){ 
            throw new IllegalArgumentException("The scale must be a positive integer or zero"); 
        } 
        BigDecimal b = new BigDecimal(Double.toString(value)); 
        BigDecimal one = new BigDecimal("1"); 
        return b.divide(one,scale, RoundingMode.HALF_UP).doubleValue(); 
    } 
}

下载文件工具类

    /** 
     * 下载url的文件到指定文件路径里面,如果文件父文件夹不存在则自动创建 
     * url 下载的http地址 
     * path 文件存储地址 
     * return 如果文件大小大于2k则返回true 
     */ 
    public static boolean downloadCreateDir(String url,String path){ 
        HttpURLConnection connection=null; 
        InputStream in = null; 
        FileOutputStream o=null; 
        try{ 
            URL httpUrl=new URL(url); 
            connection = (HttpURLConnection) httpUrl.openConnection(); 
            connection.setRequestProperty("accept", "*/*"); 
            connection.setRequestProperty("Charset", "gbk"); 
            connection.setRequestProperty("connection", "Keep-Alive"); 
            connection.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); 
            connection.setRequestMethod("GET"); 
             
            byte[] data=new byte[1024]; 
            File f=new File(path); 
            File parentDir = f.getParentFile(); 
            if (!parentDir.exists()) { 
                parentDir.mkdirs(); 
            } 
            if(connection.getResponseCode() == 200){ 
                in = connection.getInputStream(); 
                o=new FileOutputStream(path); 
                int n=0; 
                while((n=in.read(data))>0){ 
                    o.write(data, 0, n); 
                    o.flush(); 
                } 
            } 
            if(f.length()>2048){  //代表文件大小 
                return true;  //如果文件大于2k则返回true 
            } 
        }catch(Exception ex){ 
            ex.printStackTrace(); 
        }finally{ 
            try{ 
                if(in != null){ 
                    in.close(); 
                } 
            }catch(IOException ex){ 
                ex.printStackTrace(); 
            } 
            try{o.close();}catch(Exception ex){} 
            try{connection.disconnect();}catch(Exception ex){} 
        } 
        return false; 
    }

解压ZIP工具类

package com.***.tools; 
 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.nio.charset.Charset; 
import java.util.Enumeration; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipFile; 
 
/** 
 * 解压zip文件 
 */ 
public final class ZipUtil { 
    private static final int buffer = 2048; 
 
    /** 
     * 解压Zip文件 
     * @param path zip文件目录 
     */ 
    public static void unZip(String path) { 
        int count = -1; 
        String savepath = ""; 
 
        File file = null; 
        InputStream is = null; 
        FileOutputStream fos = null; 
        BufferedOutputStream bos = null; 
 
        savepath = path.substring(0, path.lastIndexOf(".")) + File.separator; // 保存解压文件目录 
        new File(savepath).mkdir(); // 创建保存目录 
        ZipFile zipFile = null; 
        try { 
            zipFile = new ZipFile(path,Charset.forName("GBK")); // 解决中文乱码问题 
            Enumeration<?> entries = zipFile.entries();  //枚举ZIP中的所有文件 
 
            while (entries.hasMoreElements()) { 
                byte buf[] = new byte[buffer]; 
 
                ZipEntry entry = (ZipEntry) entries.nextElement(); 
 
                String filename = entry.getName();  //获取文件名 
                filename = savepath + filename; 
                boolean ismkdir = false; 
                if (filename.lastIndexOf("/") != -1) { // 检查此文件是否带有文件夹 
                    ismkdir = true; 
                } 
 
                if (entry.isDirectory()) { // 如果此枚举文件是文件夹则创建,并且遍历下一个 
                    file = new File(filename); 
                    file.mkdirs(); 
                    continue; 
                } 
                file = new File(filename);  //此枚举文件不是目录 
                if (!file.exists()) {  //如果文件不存在并且文件带有目录 
                    if (ismkdir) { 
                        new File(filename.substring(0, filename 
                                .lastIndexOf("/"))).mkdirs(); // 先创建目录 
                    } 
                } 
                file.createNewFile(); //再创建文件 
 
                is = zipFile.getInputStream(entry); 
                fos = new FileOutputStream(file); 
                bos = new BufferedOutputStream(fos, buffer); 
 
                while ((count = is.read(buf)) > -1) { 
                    bos.write(buf, 0, count); 
                } 
                bos.flush(); 
            } 
        } catch (IOException ioe) { 
            ioe.printStackTrace(); 
        } finally { 
            try { 
                if (bos != null) { 
                    bos.close(); 
                } 
                if (fos != null) { 
                    fos.close(); 
                } 
                if (is != null) { 
                    is.close(); 
                } 
                if (zipFile != null) { 
                    zipFile.close(); 
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
}

文件编码转码

将GBK编码的文件转为UTF-8编码的文件

经常配合上一个使用,下载的压缩包解压为文件然后解码。

    /** 
     * 把GBK文件转为UTF-8 
     * 两个参数值可以为同一个路径 
     * @param srcFileName 源文件 
     * @param destFileName 目标文件 
     * @throws IOException 
     */ 
    private static void transferFile(String srcFileName, String destFileName) throws IOException { 
        String line_separator = System.getProperty("line.separator");  
        FileInputStream fis = new FileInputStream(srcFileName); 
        StringBuffer content = new StringBuffer(); 
        DataInputStream in = new DataInputStream(fis); 
        BufferedReader d = new BufferedReader(new InputStreamReader(in, "GBK"));  //源文件的编码方式 
        String line = null; 
        while ((line = d.readLine()) != null) 
         content.append(line + line_separator); 
        d.close(); 
        in.close(); 
        fis.close(); 
             
        Writer ow = new OutputStreamWriter(new FileOutputStream(destFileName), "utf-8");  //需要转换的编码方式 
        ow.write(content.toString()); 
        ow.close(); 
    }

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17813.html

(0)
上一篇 2021年7月19日 20:33
下一篇 2021年7月19日 20:33

相关推荐

发表回复

登录后才能评论