如何编写一个zrlog插件
zrlog的插件能够做那些事情?? 比如定时生成一个siteMap,处理垃圾评论,定时备份数据文件 等。 建立一个 Java ProJect这里需要导入 zrlog-dev-xx.jar实现 IZrlogPlugin 这个接口 这里有个几个方法需要简单说明下, package com.fzb.blog.util.plugin.api; import java.util.Map; public ...
zrlog的插件能够做那些事情?? 比如定时生成一个siteMap,处理垃圾评论,定时备份数据文件 等。 建立一个 Java ProJect这里需要导入 zrlog-dev-xx.jar实现 IZrlogPlugin 这个接口 这里有个几个方法需要简单说明下, package com.fzb.blog.util.plugin.api; import java.util.Map; public ...
问题:TCP 长连接会发生数据粘包 原因:IP层对数据进行了分包发送(就是说这个与发送端无关,接收端必须处理) TCP长连接发送数据是以数据流的方式传输。当然也并不是将整个数据一次发送。当然程序里面就是write一次就足够了。然而这个会被IP层进行分包发送,这样意味着数据并不是一次能接受完的。如果数据量不大(1.3kb~1.4kb)就有可能一次收完,能否一次接受完毕主要看当时网络的MTU值。如果 ...
Manifest-Version: 1.0
Class-Path:
注意观看这个是不是一个空行,有的请删除掉。然后就能跑起来了。
不过在Linux 咋个好像没有这个问题
一般项目涉及到会员的时候就少不了需要验证码,项目放在Windows 可以正常的运行但是一旦把项目部署到Linux 触及到验证码的方法就会导致tomcat 直接停止运行。
这个问题百度大多答案都是千篇一律的,大多都是用到了awt把项目搞挂了。
对于网页抓取这方面大家都知道百度和google 都是依靠这个起家的. 百度为广大的网名提供了很多便捷的地方.让大家能最快的找到自己的想要的东西.百度做的事情就是聚合互联网的信息资源(当然百度也有自己的信息平台,如百度文库,知道,贴吧这类的产品).那百度是怎样的抓取网站的呢.一般情况百度会有自己的链接库. 根据部分网站友链,外链.或者是网站管理员向百度提交网址的方式抓取网站A的内容. 百度的会根据网站A的情况派出蜘蛛(也有称爬虫的)去抓取网站A的内容.蜘蛛根据情况抓取网站A内容.百度根据自己的算法去组织抓取的内容. 然后你就能在百度中搜索到网站A的内容了.当然有时候可能不会第一页的. 这个就是百度核心了. 如何让用户第一时间找到自己想要的内容.
最近在 学习了socket 发现socket果然是个好东西. 仔细的去了解发现用途真的太多.通过scoket编写的东西能很好的做到各种兼容性.比如大家孰知的HTTP 协议了.sokcet通过一些同行协议就能就完成了HTTP . 想想就感觉好厉害呀.
HTTP 这样强大的协议也不是在任何情况都是很有效的.如HTTP 需要实现长链接就显得有些力不从心了.HTTP 适合BS下的应用需要什么数据就从服务器请求什么数据.如果想要服务器主动找客户端的话就不是那样容易了.HTTP 基于请求的特点就无法完成服务端一主动找客户端(浏览器)
最近在改一套HTML模板 总是要改文件的后缀
但是手动改有些显得不太爽于是 就用java 实现了这个小小的功能。 方便以后自己使用
贴代码 开始
/** * 根据文件后缀 查找符合要求文件列表 * @param path * @param prefix */ private void getFilesByPrefix(String path,String prefix){ File file[]=new File(path).listFiles(); for(File f:file) { if(f.isDirectory() && new File(f.getAbsolutePath()).listFiles()!=null){ getFilesByPrefix(f.getAbsolutePath(), prefix); } else{ if(f.getAbsoluteFile().toString().endsWith(prefix)){ fileList.add(f.getAbsoluteFile().toString()); } } } } /** 外部调用 (根据文件后缀 查找符合要求文件列表) 并且检查传入的路径是否存在 * @param path * @param prefix */ public void updateFilesPrefix(String path,String oldPrefix,String nowPrefix){ if (new File(path).isDirectory()) { getFilesByPrefix(path, oldPrefix); } if(fileList.size()>0){ for (String string : fileList) { String fileName=string.substring(0,string.lastIndexOf(".")+1); String newFileName=fileName+nowPrefix; System.out.println(newFileName); new File(string).renameTo(new File(newFileName)); } } } public static void main(String[] args) { FilesManageUtil f=new FilesManageUtil(); f.updateFilesPrefix("H:\\网页模板\\charisma-master\\charisma-master","jsp","html"); }
前几天遇到了这个问题。 发现遍历的文件夹和文件排列的顺序是乱的(按时间排序的)
于是想到了要自己去实现排序。 于是就在网上早了下代码。发现可以通过 Collections.sort
于是就想到了使用自己去重写 compare来实现排序。
下面是排序的代码。。
public static void mysort(List<Files> files){ Collections.sort(files, new Comparator<Files>() { public int compare(Files o1, Files o2) { //如果传进来的2个文件o1为文件夹 o2 不是文件时需要改变顺序 if(o1.isFiler() && !o2.isFiler()) return -1; //返回值>=0,则不调用Arrays.swap(Object x[], int a, int b) 方法。 if(!o1.isFiler() && o2.isFiler()) return 1; return 0; } }); }
人难免会忘记 。 有时候少打个: 也要纠结半天
mysql --> jdbc:mysql://localhost:3306/blog[?useUnicode=true&characterEncoding=UTF-8&user=blog&password=xxxxx] ?useUnicode=true&characterEncoding=UTF-8 可以避免一些应为mysql 安装时没有设置编码 带来的问题。 就这个有点想个网址 其他 oracle 的: sqlserver的 ; 还真给带来不少的疑惑
sql server --> jdbc:sqlserver://localhost:1433;databasename=jblog
sqlite --> jdbc:sqlite:/E:/1.db
oracle --> jdbc:oracle:thin:@localhost:1521:orcl
目前 接触过这4个数据库。
JDBC 是个好东西。
byte b[] = new byte[1] ;
这个可以避免文件经过处理后文件变大的问题。 但是处理大文件时显得就相当吃力了。
于是new byte[1] 不是一个好的选择。
byte b[]=new byte[new File("E:/1.iso").length];
这个可以提高速度。 但是带来又一个问题就是。 这个一次性把文件写到缓存区。 对与小文件没有问题。 但是大文件。 恐怕就........
于是就想到了。我有针对的出来最后一次流的大小不就行了。
贴代码开始
public static void moveOrCopyFile(String src,String tag,boolean isMove){ try { long s=System.currentTimeMillis(); File f=new File(src); FileInputStream in=new FileInputStream(src); int fileSize=(int) f.length(); byte b[]=null; new File(tag).createNewFile(); FileOutputStream out=new FileOutputStream(tag); int cnt=fileSize/(1024*1024); //小于1M(大小根据自己的情况而定)的文件直接一次性写入。 if(cnt==0) { b=new byte[fileSize]; } else { b=new byte[1024*1024]; // 出来cnt次后 文件 跳出循环 while(in.read(b)!=-1) { out.write(b); if(--cnt==0) { break; } b=new byte[1024*1024]; } //最后一次流的大小通过取模的方式得到 b=new byte[fileSize%(1024*1024)]; } //最后一次的文件写入 in.read(b); out.write(b); // 一定要记得关闭流额。 不然其他程序那个文件无法进行操作 in.close(); out.close(); System.out.println(System.currentTimeMillis()-s); if(isMove) { f.delete(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //System.out.println(src); //System.out.println(tag); }
外面递归移动或者拷贝文件的方法就不演示了。