只针对于一些需要在登录页面输入账户名密码才能上网的情形。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()); } } }}
将java控制台程序打包成jar后怎么直接在本机运行呢?其实很简单:java -jar D:\ideawork\fileClean\out\artifacts\fileClean_jar\fileClean.jar后面D盘路径改成你jar所在路径即可
所用腾讯微盘同步助手即时同步文件,图片文件也是设置默认保存在笔记目录下。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,最上面菜单栏选择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
作为Java开发工具,IDEA会在运行后在Windows的用户目录下生成一个以“.IntelliJIdea2018.1”为名称的目录,目录中存储了idea的设置跟一些缓存文件,直接拷贝他们到你的新电脑的用户目录下即可。然后将你的代码也复制到新电脑相应的盘符下。但是问题来了,旧电脑代码都存在F盘,但是新电脑最多只有E盘怎么办?这时候只需要改下新电脑盘符即可:同时按Windows键+X键,然后选择磁盘管理,选择要存代码的盘修改下盘符号即可。再复杂点的办法,一个一个导入之前的项目。不过也有个超级简单的方法,那就是完全不需要之前的项目文件,将.IntelliJIdea2018.1文件夹下的system目录整个删掉,然后打开idea,将之前的项目全选然后移除即可,但是设置储存在.IntelliJIdea2018.1\config中,因此设置不会丢失。当然也可以用idea自带的Export Settings功能导出设置文件,拷贝到新设置然后再重新导入即可。
我下载的是免安装版的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即可启动
建个基础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、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(); }}
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[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。