import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.Scanner; import java.util.regex.Pattern; import cpdetector.io.ASCIIDetector; import cpdetector.io.CodepageDetectorProxy; import cpdetector.io.JChardetFacade; import cpdetector.io.ParsingDetector; import cpdetector.io.UnicodeDetector; public class CheckCN { static int fileCount = 0;//文件总数 static int wrong = 0 ;//含有中文字符的文件数 static String regEx = "[\u4e00-\u9fa5]"; static Pattern pat = Pattern.compile(regEx); static FileOutputStream fos = null; static OutputStreamWriter osw = null; public static void main(String[] args){ Scanner sc = null; //long a = System.currentTimeMillis(); try { //每次重新执行的时候删除上次写入的文件 File file = new File("D:\\cnFile.txt"); file.delete(); System.out.println("Please input the path as 'E:\\workspace\\jc6' : "); //读取输入的路径 sc = new Scanner(System.in); String filePath = sc.nextLine(); //打开输出流 fos = new FileOutputStream(new File("D:\\cnFile.txt"),true); osw = new OutputStreamWriter(fos,"UTF-8"); //refreshFileList("E:\\workspace\\jc6"); //开始检查文件 refreshFileList(filePath); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); osw.close(); sc.close(); } catch (IOException e) { e.printStackTrace(); } } //refreshFileList("E:\\workspace\\test\\ognl\\enhance"); //System.out.print("运行时间为 "); //System.out.println(System.currentTimeMillis() - a); //输出检查结果 System.out.println(fileCount+" files were checked , and "+wrong+" files containing the Chinese ,please check D:\\cnFile.txt"); } //递归查找文件 private static void refreshFileList(String strPath) throws IOException { File dir = new File(strPath); File[] files = dir.listFiles(); if (files == null) return; for (int i = 0; i < files.length; i++) { int flag = 0 ; if (files[i].isDirectory()) { refreshFileList(files[i].getAbsolutePath()); } else { fileCount++; String strFileName = files[i].getAbsolutePath().toLowerCase(); //System.out.println(getFileEncode(files[i].getAbsolutePath())+" ----" +files[i].getName()); //截取文件格式 String fileName = strFileName.substring(strFileName.lastIndexOf(".")+1,strFileName.length()); //不知为何 两种方法判断的时候都会吧class文件和jar文件当做是含有中文字符的文件 //所以此处排除掉这class文件和jar文件不参与判断 if(!"class".equals(fileName.toLowerCase())){ //开始输入文件流,检查文件 String enCode = getFileEncode(files[i].getAbsolutePath()); if("void".equals(enCode)){ enCode="UTF-8"; }if("windows-1252".equals(enCode)){ enCode="GBK"; } FileInputStream fis = new FileInputStream(files[i].getAbsolutePath()); InputStreamReader in = new InputStreamReader(fis,enCode); BufferedReader br = new BufferedReader(in); //用于记录行数 确定文件哪一行有中文 int lineCount = 0 ; String line = null; //逐行检查文件 while((line = br.readLine())!=null){ /////使用正则表达式进行判断 lineCount++ ; /*Matcher matcher = pat.matcher(line); if (matcher.find()) { //将含有中文的文件名称和中文所在行数写入文件夹 osw.write(files[i].getAbsolutePath()+" ------- containing the Chinese at line "+lineCount+"\r\n"); osw.flush(); //System.out.println(files[i].getAbsolutePath()+"have china"); flag ++ ; } */ //////不适用正则表达式判断 两种判断方法在效率上不相上下 char[] charArray = line.toCharArray(); for (int k = 0; k < charArray.length; k ++) { if ((charArray[k] >= 0x4e00) && (charArray[k] <= 0x9fbb)) { //将含有中文的文件名称和中文所在行数写入文件夹 osw.write(files[i].getAbsolutePath()+" ------- containing the Chinese at line "+lineCount+"\r\n"); osw.flush(); flag ++ ; //wrong++; if(flag!=0) k =charArray.length ; } /* byte[] bytes=(""+charArray[k]).getBytes(); if(bytes.length==2){ int[] ints=new int[2]; ints[0]=bytes[0]& 0xff; ints[1]=bytes[1]& 0xff; if(ints[0]>=0x81 && ints[0]<=0xFE && ints[1]>=0x40 && ints[1]<=0xFE){ // isGB2312=true; //将含有中文的文件名称和中文所在行数写入文件夹 osw.write(files[i].getAbsolutePath()+" ------- containing the Chinese at line "+lineCount+"\r\n"); osw.flush(); flag ++ ; } if(flag!=0) k =charArray.length ; }*/ } } //flag!=0 说明该文件中含有中文 if(flag!=0) wrong++ ; br.close(); in.close(); fis.close(); } } } } //检查文件类型 public static String getFileEncode(String path) { /* * detector是探测器,它把探测任务交给具体的探测实现类的实例完成。 * cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法 加进来,如ParsingDetector、 * JChardetFacade、ASCIIDetector、UnicodeDetector。 * detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的 * 字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar * cpDetector是基于统计学原理的,不保证完全正确。 */ CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance(); /* * ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于 * 指示是否显示探测过程的详细信息,为false不显示。 */ detector.add(new ParsingDetector(false)); /* * JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码 * 测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以 * 再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。 */ detector.add(JChardetFacade.getInstance());// 用到antlr.jar、chardet.jar // ASCIIDetector用于ASCII编码测定 detector.add(ASCIIDetector.getInstance()); // UnicodeDetector用于Unicode家族编码的测定 detector.add(UnicodeDetector.getInstance()); java.nio.charset.Charset charset = null; File f = new File(path); try { charset = detector.detectCodepage(f.toURI().toURL()); } catch (Exception ex) { ex.printStackTrace(); } if (charset != null) return charset.name(); else return null; } }
相关推荐
内建方法,java创建和删除文件夹、文件
Java获取文件夹大小、文件大小,文件个数.doc
通过java移动指定文件夹下的所有文件到目标文件夹下的对应位置,操作简单、方便,非常实用,哈哈哈哈哈哈!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
基于jdk7或以上java版本的java删除文件功能实现,主要类是SimpleFileVisitor,可删除指定类型文件,选择是否保存空文件夹
NULL 博文链接:https://dietime1943.iteye.com/blog/1405929
java判断文件或文件夹,可以快速学会如何判断是文件夹还是文件
java递归删除整个文件夹,可以文件夹中所有的文件和子文件夹
java读取某个文件夹下的所有文件 很不错可以看看 不要分
用JAVA 实现的删除文件(夹)程序,运行的时候,输入正确的文件夹路径,然后确定删除,文件夹路径不正确的时候不会做任何事情。
java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取文件 写文件java 递归读取文件夹 读取...
它的类库很小,只有500K左右,利用该类库判定文本文件的代码如下(由于cpdetector的算法使用概率统计,所以结果并不是100%准确的,但是是迄今为止我见过
Java判断文件的编码, 适用于utf-8和gbk码的判断。
java 通过文件流,动态创建文件夹或文件
java创建和删除文件夹、文件.doc
java,判断ftp中文件是否存在
经常碰到文件编码格式不一致...在FileEncodeTranslate类中,修改一下源文件夹路径,以及转码完成后的文件存放路径、编码方式即可。 可以修改指定文件夹下的多级文件目录中的文件,并且生成的文件夹目录结构不会改变。
java创建文件夹及文件代码
java 删除指定文件夹下所有文件,使用例子 DeleteFile.delAllFile(path); path的值是D:/profile/123/
java文件的工具类,封装了常用的操作,尤其针对文件的实际类型,通过获取文件的byte,来查看文件起始字节的魔数值,通过魔数值来判断文件的类型,工具集合了常用的文件类型对应的魔数,也封装了文件类型的判断方法
JAVA解决URL路径中含有中文的问题。无论是路径中还是文件名包含中文都可以处理。经测试验证通过。