首先,贴代码,相关代码如下:
package com.huawei.test; import java.io.File; import java.io.FileInputStream; import java.nio.CharBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.util.Vector; public class FileSearchTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String filePath = System.getProperty("user.dir") + System.getProperty("file.separator") + "File"; Vector<String> fileNames = new Vector<String>(); new FileSearchTest().getFileList(fileNames, filePath, false); Charset charset = Charset.forName("GB18030"); CharsetDecoder decoder = charset.newDecoder(); try { for (String fileName : fileNames) { FileInputStream fis = new FileInputStream(fileName); FileChannel fc = fis.getChannel(); int sz = (int)fc.size(); MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, sz); CharBuffer cb = decoder.decode(bb); String s = String.valueOf(cb); int n = s.indexOf("东西"); if(n > -1) { System.out.println("exist in " + fileName); } else { System.out.println("not exist in " + fileName); } } } catch(Exception e) { e.printStackTrace(); } } public boolean getFileList(Vector<String> outFileLists,String filePath,boolean subFolderFlag) { if(outFileLists == null) { outFileLists = new Vector<String>(); } File file = new File(filePath); if(file.exists()) { File files[] = file.listFiles(); if(subFolderFlag) { for(int i = 0; i < files.length; i++) { if(files[i].isFile()) { outFileLists.add(filePath + "//" + files[i].getName()); //outFileLists.add(files[i].) } else if(files[i].isDirectory()) { getFileList(outFileLists, filePath + "//" + files[i].getName(), subFolderFlag); } } } else { for(int i = 0; i < files.length; i++) { if(files[i].isFile()) { outFileLists.add(filePath + "//" + files[i].getName()); } } } } else { return false; } return true; } }
这里要考虑文件过大的情况,因此运行的时候给JAVA虚拟机设定参数来指定其内存大小,运行命令如下:
java -Xms512m -Xmx512m -jar test.jar,这里将程序打包成了test.jar包。
否则就会出现OutOfMemoryError异常。
D:/Workspaces/JavaTest>java -jar test.jar Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOfRange(Unknown Source) at java.lang.String.<init>(Unknown Source) at java.nio.HeapCharBuffer.toString(Unknown Source) at java.nio.CharBuffer.toString(Unknown Source) at java.lang.String.valueOf(Unknown Source) at com.huawei.test.FileSearchTest.main(FileSearchTest.java:38)