Java写Windows电脑开机自动访问上网验证页面

只针对于一些需要在登录页面输入账户名密码才能上网的情形。Java写的,打包成jar用bat运行即可,然后在Windows计划任务中将bat加为开机或登录启动即可。public class Main {    //连接    public static boolean isReachable(String remoteInetAddr) {        boolean reachable = false;        InetAddress address = null;        try {            address = InetAddress.getByName(remoteInetAddr);            reachable = address.isReachable(5000);        } catch (UnknownHostException e) {        } catch (IOException e) {        }        return reachable;    }    public static void main(String[] args) {        while (true) {            Boolean bon = false;            bon = isReachable("baidu.com");            if (bon)                return;            conn(bon);        }    }    //打开URL    public static void conn(boolean bon) {        URL url = null;        if (!bon) {            try {                url = new URL("这里填可以一键验证的网址 参数等可按F12获取");                InputStream in = url.openStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream                System.out.println("重连成功");                in.close();//关闭此输入流并释放与该流关联的所有系统资源。            } catch (IOException e) {                System.out.println("无法连接到:" + url.toString());            }        }    }}

Windows电脑利用cmd运行jar文件

将java控制台程序打包成jar后怎么直接在本机运行呢?其实很简单:java -jar D:\ideawork\fileClean\out\artifacts\fileClean_jar\fileClean.jar后面D盘路径改成你jar所在路径即可

markdown清除本地冗余图片文件Java源码

        所用腾讯微盘同步助手即时同步文件,图片文件也是设置默认保存在笔记目录下。Markdown有一个问题就是文档中图片链接删除,源文件仍会存在于图片文件夹,下列这个程序可以对比并删除冗余的图片或资源文件(假删除,冗余文件将会移动到笔记文件夹中到 回收站 文件夹中,确定要删除时可以将整个文件夹手动删除)。public class Main {    static ArrayList<String> list= new ArrayList<>();    static String text;    public static void main(String[] args) {        File file = new File("D:\\微云同步助手\\QQ\\笔记");        //获取其file对象      //获取其file对象        func(file);        for (String s : list) {            String fileName = s.substring(s.lastIndexOf("\\") + 1, s.length());//获取文件名            if (!text.contains(fileName)){ //如果图片等资源在md内容中不存在即删除                System.out.println(fileName+"删除成功");                String hs=file+"\\回收站\\";                if (!new File(hs).exists())                    new File(hs).mkdir();                new File(s).renameTo(new File(hs+fileName));            }        }    }    /**     * 遍历目录     * @param file     */    private static void func(File file) {        File[] fs = file.listFiles();        for (File f : fs) {            if (f.isDirectory() && !f.toString().contains("回收站"))    //排除回收站目录                func(f);            if (f.isFile()) {      //若是文件,直接打印详细路径                String s = f.toString();                if (s.endsWith(".md")) {//获取md文件内容                    text += readToString(s);                } else {                    list.add(s);                }            }        }    }    /**     * 获取文本     * @param fileName     * @return     */    public static String readToString(String fileName) {        String encoding = "UTF-8";        File file = new File(fileName);        Long filelength = file.length();        byte[] filecontent = new byte[filelength.intValue()];        try {            FileInputStream in = new FileInputStream(file);            in.read(filecontent);            in.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        try {            return new String(filecontent, encoding);        } catch (UnsupportedEncodingException e) {            System.err.println("The OS does not support " + encoding);            e.printStackTrace();            return null;        }    }}当然也可以用BufferedReaderpublic class Main {    static ArrayList<String> list= new ArrayList<>();    static StringBuilder text=new StringBuilder();    /**     * 暴力比较     * @param args     * @throws IOException     */    public static void main(String[] args) throws IOException {        long start = System.currentTimeMillis();        File file = new File("D:\\坚果云\\CodeNote");        //获取其 file 对象        System.out.println("正在处理中……");        func(file);        for (String s : list) {            String fileName = s.substring(s.lastIndexOf("\\") + 1, s.length());//获取文件名            if (!text.toString().contains(fileName)){ //如果图片等资源在 md 内容中不存在即删除                System.out.println(fileName+"删除成功 ");                String hs=file+"\\回收站\\";                if (!new File(hs).exists())                    new File(hs).mkdir();                new File(s).renameTo(new File(hs+fileName));            }        }        long end=System.currentTimeMillis();        long time=end-start;        System.out.println("已完成,耗时"+time+" ms, 请按任意键退出");        System.in.read();    }    /**     * 遍历目录     * @param file     */    private static void func(File file) throws IOException {        File[] fs = file.listFiles();        for (File f:fs) {            if (f.isDirectory() && !f.toString().contains("回收站"))    //排除回收站目录                func(f);            if (f.isFile()) {      //若是文件,直接打印详细路径                String s = f.toString();                if (s.endsWith(".md")) {//获取 md 文件内容                    text.append(readToString(s));                    System.out.println("读取"+text.length()/1000+"K个字符");                } else {                    list.add(s);                }            }        }    }    /**     * 获取文本     * @param fileName     * @return     */    public static String readToString(String fileName) throws IOException {        BufferedReader br = new BufferedReader(new FileReader(fileName));        String line;        StringBuilder txt = new StringBuilder();        while ((line = br.readLine()) != null) {            txt.append(line);        }        br.close();        return txt.toString();    }}再改进下吧,用正则,精确点匹配(也不是很精确,因为不同文件夹可能有同名文件,不过能保证一个文件夹有文件 a.png跟 aaa.png不至于都匹配上)package com.company;import java.io.*;import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main {    static ArrayList<String> list= new ArrayList<>();    static StringBuilder text=new StringBuilder();    public static void main(String[] args) throws IOException {        ArrayList<String> picList = new ArrayList<>();        long start = System.currentTimeMillis();        File file = new File("D:\\坚果云\\CodeNotes");        //获取其 file 对象        System.out.println("正在处理中……");        func(file);        int i=0;        int delCount=0;        String ContentArea = text.toString();        String regex = "\\(assets/.*?\\.\\w+\\)";        Pattern pt=Pattern.compile(regex);        Matcher mt=pt.matcher(ContentArea);        while(mt.find()) {            String replace = mt.group().replace("(assets/", "").replace(")", "");            picList.add(replace);            i++;        }        System.out.println("原文包含"+i+"张图片");        for (String s : list) {            String fileName = s.substring(s.lastIndexOf("\\") + 1, s.length());//获取文件名            int count=0;            for (String pic : picList) {                if (pic.equals(fileName)){                    count++;                }            }            if (count<=0){                delCount++;//                System.out.println(fileName+"删除成功 ");                String hs=file+"\\回收站\\";                if (!new File(hs).exists())                    new File(hs).mkdir();                if (!new File(s).renameTo(new File(hs + fileName))){                    new File(hs + fileName).delete();                    new File(s).renameTo(new File(hs + fileName));                }            }        }        long end=System.currentTimeMillis();        long time=end-start;        System.out.println("已清理"+delCount+"张图片或文件,耗时"+time+" ms, 请按任意键退出");        System.in.read();    }    private static void func(File file) throws IOException {        File[] fs = file.listFiles();        for (File f:fs) {            if (f.isDirectory() && !f.toString().contains("回收站"))    //排除回收站目录                func(f);            if (f.isFile()) {      //若是文件,直接打印详细路径                String s = f.toString();                if (s.endsWith(".md")) {//获取 md 文件内容                    text.append(readToString(s));                } else {                    list.add(s);                }            }        }    }    public static String readToString(String fileName) throws IOException {        BufferedReader br = new BufferedReader(new FileReader(fileName));        String line;        StringBuilder txt = new StringBuilder();        while ((line = br.readLine()) != null) {            txt.append(line);        }        br.close();        return txt.toString();    }}

Eclipse中validate的禁用不验证快速导入工程

validate的作用其实是验证工程代码的可用性,但是开启后会大大加大导入工程项目的时间,甚至卡在进度条不动了,其实禁用很简单:windows>preferences>validation>disable all 即可

Eclipse中validate的禁用不验证快速导入工程

Eclipse设置代码自动提示与自动保存功能

自动提醒:打开Eclipse,最上面菜单栏选择Windows>preferences>Java>Editor>Content Assist,找到Auto activation 下的子选项auto activation triggers for java后的文本框,输入abcdefghijklmnopqrstuvwxyz.即可,最后一个符号是小写句号,其实顺序可以不一样。自动保存:Windows->Preferences -> General -> Workspace -> Save automatically before build勾选Save automatically before build即可,另外Preferences -> Run/Debug -> Launching -> Save dirty editors before launching 设置为 Always

换电脑无损迁移IDEA设置配置文件的方法

作为Java开发工具,IDEA会在运行后在Windows的用户目录下生成一个以“.IntelliJIdea2018.1”为名称的目录,目录中存储了idea的设置跟一些缓存文件,直接拷贝他们到你的新电脑的用户目录下即可。然后将你的代码也复制到新电脑相应的盘符下。但是问题来了,旧电脑代码都存在F盘,但是新电脑最多只有E盘怎么办?这时候只需要改下新电脑盘符即可:同时按Windows键+X键,然后选择磁盘管理,选择要存代码的盘修改下盘符号即可。再复杂点的办法,一个一个导入之前的项目。不过也有个超级简单的方法,那就是完全不需要之前的项目文件,将.IntelliJIdea2018.1文件夹下的system目录整个删掉,然后打开idea,将之前的项目全选然后移除即可,但是设置储存在.IntelliJIdea2018.1\config中,因此设置不会丢失。当然也可以用idea自带的Export Settings功能导出设置文件,拷贝到新设置然后再重新导入即可。

windows系统下解决redis服务器软件闪退问题

我下载的是免安装版的window版redis,解压后如下:刚解压开直接双击redis-server.exe启动redis或者在命令提示符中找到路径启动,但当第二次使用的时候,发现双击redis-server闪退,在命令提示符启动也报错(该错误其实由于电脑内存不足影响的),我百度了好多解决方式,但是都没用,最后终于找到一个适合自己电脑上redis的解决方式,仅供参考,如下:第一步:在解压的redis文件夹下新建一个start.bat(window启动一般都是xx.bat)第二步:打开redis.windows.conf文件,限制内存            大约300多行的位置加一句maxheap 1024000000 即可    # maxheap <bytes>    maxheap 1024000000第三步:在新建的start.bat文件中加入下面一句话(因为启动redis需要用到这两个文件)redis-server.exe  redis.windows.conf以上三个步骤完成之后,保存,双击start.bat即可启动

windows系统下解决redis服务器软件闪退问题

Java Web将多个servlet封装在一个class类中

建个基础servlet类继承HttpServlet,其中除了可以反射方法外也可以写些常用的方法 :public class BaseServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //重写service方法 完成方法分发 /*获取请求路径 * 获取方法名称 * 获取方法对象 * 执行反射*/ String requestURI = req.getRequestURI(); //获取uri String methodName = requestURI.substring(requestURI.indexOf("/") + 1); //substring获取方法名 try { Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); method.invoke(this,req,resp); //此处的this指入口的class,非此class } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * 直接将传入对象序列化为json * 并传给浏览器 * @param obj * @param response * @throws IOException */ public void writeValue(Object obj,HttpServletResponse response) throws IOException { ObjectMapper mapper = new ObjectMapper(); response.setContentType("application/json;charset=utf-8"); //设置编码 注意两个设置字段中间用分号隔开 mapper.writeValue(response.getOutputStream(),obj); } public String writeValueAsString(Object obj) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(obj); //将传入对象序列化为json并返回字符 }} 相关servlet均继承baseservlet@WebServlet("/user/*")public class UserServlet extends BaseServlet { /*原本新建的get post方法改成你需要的方法 protected修饰改成public 否则需要在baseServlet中暴力反射 不建议使用暴力反射 申明UserService业务对象 方便使用 声明业务或dao对象一般先建接口 然后再实现*/ UserService service = new UserServiceImpl(); //访问 域名/user/regist即可以访问下列方法 public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }}

使用DateFormat写的星座查询Java小程序

关键词:DateFormat、getTime()import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Scanner;public class demo {    public static void main(String[] args) throws ParseException {            Scanner sc = new Scanner(System.in);            System.out.print("请输入查询日期(例“2-3”即2月3日):");            String input = "2000-" + sc.next();     //输入查询,之所以实2000因为其是闰年,2月有29号            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            long birth = sdf.parse(input).getTime();    //解析为Date并获取时间戳            if (birth >= getTimer("2000-03-21") && birth <= getTimer("2000-04-19")) {                System.out.println("白羊座");            } else if (birth >= getTimer("2000-04-20") && birth <= getTimer("2000-05-20")) {                System.out.println("金牛座");            } else if (birth >= getTimer("2000-05-21") && birth <= getTimer("2000-06-20")) {                System.out.println("双子座");            } else if (birth >= getTimer("2000-06-21") && birth <= getTimer("2000-07-21")) {                System.out.println("巨蟹座");            } else if (birth >= getTimer("2000-07-22") && birth <= getTimer("2000-08-22")) {                System.out.println("狮子座");            } else if (birth >= getTimer("2000-08-23") && birth <= getTimer("2000-09-22")) {                System.out.println("处女座");            } else if (birth >= getTimer("2000-09-23") && birth <= getTimer("2000-10-22")) {                System.out.println("天秤座");            } else if (birth >= getTimer("2000-10-23") && birth <= getTimer("2000-11-21")) {                System.out.println("天蝎座");            } else if (birth >= getTimer("2000-11-22") && birth <= getTimer("2000-12-21")) {                System.out.println("射手座");            } else if (birth >= getTimer("2000-01-20") && birth <= getTimer("2000-02-18")) {                System.out.println("水瓶座");            } else if (birth >= getTimer("2000-02-19") && birth <= getTimer("2000-03-20")) {                System.out.println("双鱼座");            } else {                System.out.println("摩羯座");            }        }        public static long getTimer (String date) throws ParseException {            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            return sdf.parse(date).getTime();        }}

System类中arraycopy方法的使用 为什么char[]数组能直接打印

Q:现有一个字符数组{'i','t','c','a','s','a'},请使用System类中的arraycopy()方法在控制台输出“itcast”。(提示:将[1]号数组元素复制到最后位置并覆盖原有元素。)char[] str={'i','t','c','a','s','a'};System.arraycopy(str,1,str,5,1);System.out.print(str);一直忽略的误区:1、以为arraycopy需要两个不同数组,但是其实一个数组也可以操作2、char[]数组不用遍历输出,可以直接打印出来拓展:char类型的数组就相当于一个字符串。因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。