java web 项目 常用 小工具类 ~~~~

一 、DateUtil  日期工具类

package com.devframe.common.util;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;/*** @author zhangkai* @ClassName: DateUtil* @Description: 日期工具类* @date 2017年9月22日 上午8:52:33*/
public class DateUtil {/*** SimpleDateFormat不是线程安全的. 在多线程并行处理的情况下, 会得到非预期的值. 这个错误非常普遍!* <p>所以只给定格式,自己new<p/>* "yyyy-MM-dd": 2017-09-22<br>* "yyyy-MM-dd hh:mm:ss": 2017-09-22 9:27:41<br>* "yyyy-MM-dd hh:mm:ss EE": 2017-09-22 9:27:41 星期五<br>* "yyyy年MM月dd日 hh:mm:ss EE": 2017年09月22日 9:27:41 星期五<br>*/public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";public static final String DATE_FORMAT1 = "yyyy-MM-dd";public static final String DATE_FORMAT2="yyyyMMddHHmmss";public static final String  DATE_FORMAT3= "yyMMddHHmmss";public static final String DATE_FORMAT4 = "yyyy-MM-dd 00:00:00";/*** 时间戳转换成日期格式字符串** @param seconds 精确到秒的字符串* @param format  指定格式* @return String*/public static String timeStamp2Datestr(String seconds, String format) {if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {return "";}if (format == null || format.isEmpty()) {format = DATE_FORMAT;}SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(new Date(Long.valueOf(seconds + "000")));}/*** 日期格式字符串转换成时间戳** @param date_str 字符串日期* @param format   format* @return String*/public static String datestr2TimeStamp(String date_str, String format) {if (format == null || format.isEmpty()) {format = DATE_FORMAT;}try {SimpleDateFormat sdf = new SimpleDateFormat(format);return String.valueOf(sdf.parse(date_str).getTime() / 1000);} catch (Exception e) {e.printStackTrace();}return "";}/*** date 转换成时间戳字符串** @param date date* @return java.lang.String*/public static String date2TimeStamp(Date date) {if (date == null) {date = new Date();}try {return String.valueOf(date.getTime());} catch (Exception e) {e.printStackTrace();}return "";}/*** 取得当前时间戳(精确到秒)** @return String*/public static String timeStamp() {long time = System.currentTimeMillis();return String.valueOf(time / 1000);}/*** date转换成string** @param date   date* @param format formatStr* @return String*/public static String date2String(Date date, String format) {if (date == null) {return null;}if (format == null || format.isEmpty()) {format = DATE_FORMAT;}try {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(date);} catch (Exception e) {e.printStackTrace();}return null;}/*** 时间戳转成Date** @param timeStamp 时间戳字符串* @return Date*/public static Date timeStamp2Date(String timeStamp) {if (timeStamp == null || timeStamp.isEmpty()) {return null;}try {if (timeStamp.length() == 10) {return new Date(Long.valueOf(timeStamp + "000"));}if (timeStamp.length() == 13) {return new Date(Long.valueOf(timeStamp));}} catch (Exception e) {e.printStackTrace();}return null;}/*** 时间字符串转换成Date** @param dateString date字符串* @param format     转换格式字符串* @return Date*/public static Date string2Date(String dateString, String format) {if (StringUtil.isNull(dateString)) {return null;}if (StringUtil.isNull(format)) {format = DATE_FORMAT;}try {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.parse(dateString);} catch (Exception e) {e.printStackTrace();}return null;}/*** 返回当前时间精确到秒的时间戳** @return Long*/public static Long getSecondTimestamp() {return getSecondTimestamp(null);}/*** 获取精确到秒的时间戳,默认返回当前时间** @return Long*/public static Long getSecondTimestamp(Date date) {if (null == date) {date = new Date();}String timestamp = String.valueOf(date.getTime());int length = timestamp.length();if (length > 3) {return Long.valueOf(timestamp.substring(0, length - 3));} else {return 0L;}}/*** 返回传入时间与当前时间间隔秒数** @param date date* @return long*/public static long getTimeDelta(Date date) {return getTimeDelta(new Date(), date);}/*** 返回指定时间间隔秒数** @param date1 date1* @param date2 date2* @return long*/public static long getTimeDelta(Date date1, Date date2) {if (date1 == null) {throw new NullPointerException();}if (date2 == null) {return 0L;}return Math.abs(date1.getTime() - date2.getTime()) / 1000;}public static double getTimeDeltaByHour(Date date) {if (date == null) {throw new NullPointerException("date required not null");}return Math.abs(System.currentTimeMillis() - date.getTime()) / (1000 * 3600);}/*** 获取当前日期实在周的星期一和星期日的日期* @param args*/public static List<String > getTimeInterval() {  Calendar cal = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  cal.setFirstDayOfWeek(Calendar.MONDAY);  // 获得当前日期是一个星期的第几天  int day = cal.get(Calendar.DAY_OF_WEEK);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值  cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);  //星期一String imptimeBegin = sdf.format(cal.getTime());    cal.add(Calendar.DATE, 6);//星期日String imptimeEnd = sdf.format(cal.getTime()); List<String> list = new ArrayList<String>();list.add(imptimeBegin);list.add(imptimeEnd);return list;} /** 计算某一天所在周的星期一和星期天的日期*/public static String[] convertWeekByDate(String s) throws Exception {String result[] =  new String[2];SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式Date time = sdf.parse(s);Calendar cal = Calendar.getInstance();cal.setTime(time);// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天if (1 == dayWeek) {cal.add(Calendar.DAY_OF_MONTH, -1);}cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值String imptimeBegin = sdf.format(cal.getTime()); //所在周的星期一result[0] = imptimeBegin; cal.add(Calendar.DATE, 6);String imptimeEnd = sdf.format(cal.getTime()); //所在周的星期日result[1] = imptimeEnd;return result;}public static void main(String[] args) {System.out.println(DateUtil.getSecondTimestamp());System.out.println(DateUtil.getTimeDelta(new Date()));}
}

二 、JaxbUtil  Java 对象和 xml 互转工具类

package com.devframe.common.util;import java.io.StringReader;
import java.io.StringWriter;import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;/*** @ClassName: * @Description: * @author DuanZhaoXu* @date 2018年8月23日上午8:58:52*/
public class JaxbXmlUtil {/*** JavaBean转换成xml*      * 默认编码UTF-8** @param obj* @return*/public static String convertToXml(Object obj) {return convertToXml(obj, "UTF-8");}/*** JavaBean转换成xml* @param obj* @param encoding* @return*/public static String convertToXml(Object obj, String encoding) {String result = null;try {JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);StringWriter writer = new StringWriter();marshaller.marshal(obj, writer);result = writer.toString();} catch (Exception e) {e.printStackTrace();}return result;}/*** xml转换成JavaBean* @param xml* @param c* @return*/@SuppressWarnings("unchecked")public static <T> T converyToJavaBean(String xml, Class<T> c) {T t = null;try {JAXBContext context = JAXBContext.newInstance(c);Unmarshaller unmarshaller = context.createUnmarshaller();t = (T) unmarshaller.unmarshal(new StringReader(xml));} catch (Exception e) {e.printStackTrace();}return t;}
}

三 、MapRemoveNullUtil  移除map中空key或者value空值 的工具类

package com.devframe.common.util;import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;public class MapRemoveNullUtil {/*** 移除map中空key或者value空值* * @param map*/public static void removeNullEntry(Map map) {removeNullKey(map);removeNullValue(map);}/*** 移除map的空key* * @param map* @return*/public static void removeNullKey(Map map) {Set set = map.keySet();for (Iterator iterator = set.iterator(); iterator.hasNext();) {Object obj = (Object) iterator.next();remove(obj, iterator);}}/*** 移除map中的value空值* * @param map* @return*/public static void removeNullValue(Map map) {Set set = map.keySet();for (Iterator iterator = set.iterator(); iterator.hasNext();) {Object obj = (Object) iterator.next();Object value = (Object) map.get(obj);remove(value, iterator);}}/*** Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator* 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,* 所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出* java.util.ConcurrentModificationException 异常。 所以 Iterator* 在工作的时候是不允许被迭代的对象被改变的。 但你可以使用 Iterator 本身的方法 remove() 来删除对象,* Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。* * @param obj* @param iterator*/private static void remove(Object obj, Iterator iterator) {if (obj instanceof String) {String str = (String) obj;if (StringUtil.isNull(str)) {iterator.remove();}} else if (obj instanceof Collection) {Collection col = (Collection) obj;if (col == null || col.isEmpty()) {iterator.remove();}} else if (obj instanceof Map) {Map temp = (Map) obj;if (temp == null || temp.isEmpty()) {iterator.remove();}} else if (obj instanceof Object[]) {Object[] array = (Object[]) obj;if (array == null || array.length <= 0) {iterator.remove();}} else {if (obj == null) {iterator.remove();}}}public static void main(String[] args) {Map map = new HashMap();map.put(1, "第一个值是数字");map.put("2", "第2个值是字符串");map.put(new String[] { "1", "2" }, "第3个值是数组");map.put(new ArrayList(), "第4个值是List");map.put(new HashMap(), "Map 无值");map.put("5", "第5个");map.put("6", null);map.put("asd", "asdasd");map.put("7", "");map.put("8", "  ");System.out.println(map);MapRemoveNullUtil.removeNullKey(map);System.out.println();System.out.println(map);MapRemoveNullUtil.removeNullValue(map);System.out.println();System.out.println(map);}
}

四、MD5Util md5 加密工具类

package com.devframe.common.util;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;/*** @ClassName: MD5Util* @Description: MD5加密工具类* @author DuanZhaoXu* @date 2018年3月13日 上午9::15:25* */
public class MD5Util {private MD5Util() {}public static String getEncryption(String originString) {String result = "";try {if (originString != null) {try {// 指定加密的方式为MD5MessageDigest md = MessageDigest.getInstance("MD5");// 进行加密运算byte bytes[] = md.digest(originString.getBytes("ISO8859-1"));for (int i = 0; i < bytes.length; i++) {// 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位String str = Integer.toHexString(bytes[i] & 0xFF);if (str.length() == 1) {str += "F";}result += str;}} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}} catch (Exception e) {Log.error(e);}return result;}public static void main(String[] args) {String aa = MD5Util.getEncryption("12345");System.out.println(aa);}
}

五 、Properties  工具类

package com.devframe.common.util;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Properties;public class PropertyUtil {private static final Properties PROP = new Properties();/*** 设置配置文件的路径*/private static final String PATH = "/config.properties";/*** 读取配置文件的内容(key,value)** @param key key* @return key对应的value*/public static String get(String key) {if (PROP.isEmpty()) {FileInputStream in = null;InputStreamReader reader = null;try {URL url = PropertyUtil.class.getResource(PATH);in = new FileInputStream(url.getPath());reader = new InputStreamReader(in, "utf-8");PROP.load(reader);} catch (IOException e) {Log.error(e);} finally {if (reader != null) {try {reader.close();in.close();} catch (IOException e) {Log.error(e);}}}}return PROP.getProperty(key);}
}

六 、WinRarUtil   调用WinRAR.exe 解压rar文件工具类

package com.devframe.common.util;import java.io.File;/*** 调用WinRAR.exe 解压rar文件* @ClassName: WinRarUtil* @Description: WinRarUtil* @author DuanZhaoXu* @date 2018年9月15日下午7:21:19*/
public class WinRarUtil {//服务器需要安装winrarpublic static final String winrarPath = "C://Program Files//WinRAR//WinRAR.exe"; public static boolean unrar(String rarFile, String target) {     boolean bool = false;     File f=new File(rarFile);  if(!f.exists()){  return false;  }  String cmd = winrarPath + " X " + f.getPath() + " "+target;    try {     Process proc = Runtime.getRuntime().exec(cmd);     if (proc.waitFor() != 0) {     if (proc.exitValue() == 0) {     bool = false;     }     } else {     bool = true;     }     } catch (Exception e) {     e.printStackTrace();     }     return bool;     }public static void main(String[] args) {WinRarUtil.unrar("C:\\resultdata\\save\\devallinone.rar","C:\\resultdata\\save");   }
}

七、 zip4jUtil   解压压缩 zip 文件工具类

package com.devframe.common.util;import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;import com.devframe.common.exception.DevFrameException;import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;/*** Created by wzj on 2017/11/27.*/
public class Zip4jUtil {public static void main(String[] args) {try {// zip("F:\\测试1", "F:\\测试1.zip", null);// long time = System.currentTimeMillis();// unZip("D:\\globalPathPlanning_v1.11_java.zip","D:\\globalPathPlanning_v1.11_java",null);// long time2 = System.currentTimeMillis();// System.out.println(time2 - time);// ZipFile zipFile = new ZipFile("F:\\HEB_Test1.zip");List<Map<String, Object>> result = getZipTiffFiles("C:\\resultdata\\save\\test2.zip", "C:\\resultdata\\save\\", "txt");for (Map<String, Object> map : result) {System.out.println("文件名称:" + map.get("fileName") + "<>" + "上传时间:" + map.get("uploadTime"));}} catch (Exception e) {e.printStackTrace();}}/*** 解压并获取 zip 文件里面的文件 名称 路径 和 上传时间* * @param srcFile* @return List<Map<String, Object>>* @throws ZipException*/public static List<Map<String, Object>> getZipTiffFiles(String srcFile, String dest, String type)throws ZipException {File file = new File(srcFile);if (!file.exists()) {throw new DevFrameException("文件不存在");}// 文件名称带有.zip后缀String fileName = file.getName();// 文件名称不带zip后缀String fileNameNoZip = fileName.substring(0, file.getName().lastIndexOf("."));// 解压unZip(srcFile, dest);// 解压之后的文件夹File file2 = new File(dest + fileNameNoZip);String uploadTime = DateUtil.date2String(new Date(), DateUtil.DATE_FORMAT);List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();if(file2!=null) {result = recursionGetTifFiles(result, type, uploadTime, file2);}FileUtils.deleteQuietly(file);return result;}public static List<Map<String, Object>> recursionGetTifFiles(List<Map<String, Object>> result, String type,String uploadTime, File file) {File[] subFiles = file.listFiles();if (subFiles != null && subFiles.length > 0) {for (File subFile : subFiles) {String fileName = subFile.getName();String filePath = subFile.getPath();if (subFile.isFile()) {if (StringUtils.isBlank(type)) {result = add(result, fileName, filePath, uploadTime);} else {if (fileName.endsWith("." + type)) {result = add(result, fileName, filePath, uploadTime);}}} else if (subFile.isDirectory()) {result = recursionGetTifFiles(result, type, uploadTime, subFile);}}}return result;}public static List<Map<String, Object>> add(List<Map<String, Object>> result, String fileName, String filePath,String uploadTime) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", fileName);map.put("path", filePath);map.put("updateTime", uploadTime);result.add(map);return result;}/*** 压缩(无需密码)** @param srcFile* @param dest* @throws ZipException*/public static void zip(String srcFile, String dest) throws ZipException {zip(srcFile, dest, null);}/*** 压缩** @param srcFile 源目录* @param dest    要压缩的目录* @param passwd  密码 不是必填* @throws ZipException 异常*/public static void zip(String srcFile, String dest, String passwd) throws ZipException {File srcfile = new File(srcFile);// 创建目标文件String destname = buildDestFileName(srcfile, dest);ZipParameters par = new ZipParameters();//       压缩级别
//        static final int COMP_STORE = 0;(仅打包,不压缩) (对应好压的存储)
//        static final int COMP_DEFLATE = 8;(默认) (对应好压的标准)
//        static final int COMP_AES_ENC = 99;par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//        压缩等级
//        static final int DEFLATE_LEVEL_FASTEST = 1;
//        static final int DEFLATE_LEVEL_FAST = 3;
//        static final int DEFLATE_LEVEL_NORMAL = 5;
//        static final int DEFLATE_LEVEL_MAXIMUM = 7;
//        static final int DEFLATE_LEVEL_ULTRA = 9;       par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);if (passwd != null) {par.setEncryptFiles(true);// 设置加密方式为0, 默认 为-1,没有加密方式会报错par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);par.setPassword(passwd.toCharArray());}ZipFile zipfile = new ZipFile(destname);if (srcfile.isDirectory()) {zipfile.addFolder(srcfile, par);} else {zipfile.addFile(srcfile, par);}}/*** @param zipFile* @param dest* @throws ZipException*/public static void unZip(String zipFile, String dest) throws ZipException {unZip(zipFile, dest, null);}/*** 解压** @param zipfile 压缩包文件* @param dest    目标文件* @param passwd  密码* @throws ZipException 抛出异常*/public static void unZip(String zipfile, String dest, String passwd) throws ZipException {ZipFile zfile = new ZipFile(zipfile);zfile.setFileNameCharset("GBK");// 在GBK系统中需要设置utf-8,windows系统设置GBKif (!zfile.isValidZipFile()) {throw new ZipException("压缩文件不合法,可能已经损坏!");}//        File file = new File(dest);
//        if (file.isDirectory() && !file.exists())
//        {
//            file.mkdirs();
//        }if (zfile.isEncrypted()) {zfile.setPassword(passwd.toCharArray());}zfile.extractAll(dest);}public static String buildDestFileName(File srcfile, String dest) {if (dest == null) {if (srcfile.isDirectory()) {dest = srcfile.getParent() + File.separator + srcfile.getName() + ".zip";} else {String filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));dest = srcfile.getParent() + File.separator + filename + ".zip";}} else {createPath(dest);// 路径的创建if (dest.endsWith(File.separator)) {String filename = "";if (srcfile.isDirectory()) {filename = srcfile.getName();} else {filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));}dest += filename + ".zip";}}return dest;}private static void createPath(String dest) {File destDir = null;if (dest.endsWith(File.separator)) {destDir = new File(dest);// 给出的是路径时} else {destDir = new File(dest.substring(0, dest.lastIndexOf(File.separator)));}if (!destDir.exists()) {destDir.mkdirs();}}}

java web 项目 常用 小工具类 ~~~~相关推荐

  1. java项目常用的工具类

    前言 在开发过程中,我们会遇到很多繁琐或者棘手的问题,但是,这些问题往往会存在一些便捷的工具类,来简化我们的开发,下面是我工作中经常使用到的工具类 常用工具类 日期工具类 import java.te ...

  2. java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?

    上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式Servlet2.5 方式 Servlet3.0 方式 SpringMVC 方式 案例实操 S ...

  3. JAVA WEB之XSS防御工具类代码示例

    简述 人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆.因此,有人将跨站脚本攻击缩写 ...

  4. java中时间常用处理工具类-DateUtils

    仅供参考,收录了一些常用的java中关于时间的处理方法,希望能帮到你! import org.apache.commons.lang3.time.DateFormatUtils;import java ...

  5. Java并发中常用同步工具类

    为什么80%的码农都做不了架构师?>>>    同步工具类可以是任何一个对象,只要它根据其自身的状态来协调线程控制流.阻塞队列(BlockingQueue)可以作为同步工具类,其他类 ...

  6. java 项目中常用的工具类总结

    1.文件 1.根据图片的链接,下载图片 package com.lingxu.module.BigDataJoinMessage.util;import java.io.FileOutputStrea ...

  7. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  8. Python3下Web下载媒体小工具(常用来下B站视频)

    Python3下Web下载媒体小工具(常用来下B站视频) 项目地址:https://github.com/soimort/you-get 使用条件 需要以下依赖项: Python 3.2或以上 FFm ...

  9. Android项目中常用的工具类集(史上最全整理)

    如果你是一名有经验的Android开发者,那么你一定积累了不少的工具类,这些工具类是帮助我们快速开发的基础.如果你是新手,那么有了这些辅助类,可以让你的项目做起来更加的简单. 下面介绍一个在GitHu ...

最新文章

  1. 每日一皮:这设计师真有才...
  2. Qt中moc问题(qt moc 处理 cpp)
  3. how drop down list description is displayed by UI framework
  4. 什么人适合学习Java编程?编程好学吗?
  5. 【C语言】文件程序设计实践
  6. 用JQuery操作元素的style属性
  7. 敏捷开发一千零一问系列之十八:长期受制于强势客户怎么办?(下)
  8. AS3.0文档类:FLASH右键菜单文档类
  9. [网络流24题] 软件补丁问题
  10. 微信打飞机--Java版
  11. 一个***的自白(续)
  12. 手写操作系统2——编写MBR主引导程序
  13. ppt太大如何压缩到最小,这个方法你得知道
  14. 微信公众请求config php,微信公众平台开发之配置与请求_PHP
  15. 俩人同样写代码,我拿七千他咋五万八...
  16. 后台配置税码(进项税或者销项税税码)
  17. Java解决杨辉三角问题(这里提供了两种方法)
  18. win10有信号没有网络连接到服务器,win10系统显示网络连接正常但没有网络,无法上网的办法介绍...
  19. PhpSpreadsheet读取单元格内容的坑
  20. python反爬虫应对之借助平台超级鹰突破网页验证码识别

热门文章

  1. C# 生成CHM文件 资料汇总
  2. Linux 压测工具 stress 安装下载使用
  3. sql小数转换为百分数_小学数学16年重点知识汇总,为孩子【收藏】起来吧!
  4. U盘安装原版/Ghost win10系统详细教程,含重装系统中出现的各种问题解决办法(蓝屏、启动热键无效、无法识别U盘启动盘等)
  5. c语言课程设计万年历,C语言课程设计--万年历.doc
  6. 数据库(一)键值约束
  7. PMO成功的六个关键因素
  8. 安卓屏幕朗读app_一款非常好用的安卓手机屏幕特效app光兮
  9. web前端设计图书清单
  10. 关于rtsp公共测试流网址