java 文件过滤器为什么报空指针异常?求详解!!!

Python010

java 文件过滤器为什么报空指针异常?求详解!!!,第1张

accept函数你用的不对,它只需要你指定过滤条件就可以了,不需要递归调用.

如果你需要其子目录下的.png文件,可以另外写一个递归调用.

完整的文件过滤的Java程序如下

import java.io.File

import java.io.FilenameFilter

class MyFilenameFilter1 implements FilenameFilter{

 @Override

 public boolean accept(File dir, String name) {

  if(name.toLowerCase().endsWith(".png"))return true

  return false

 }

}

public class FileDemo6_1 {

 static void findFile(File dir){

  if(dir.isDirectory()){

   File[] fs1=dir.listFiles(new MyFilenameFilter1())

   for(File file2:fs1){

    System.out.println(file2)

   }

   File[] fs=dir.listFiles()

   for(File file:fs){

    findFile(file) 

   }

  }

 }

 public static void main(String[] args) {

  findFile(new File("C:/tmp/6"))

 }

}

运行结果

C:\tmp\6\female.png

C:\tmp\6\male.png

C:\tmp\6\image\female.png

import java.io.RandomAccessFile

/**

 * 格式

 * 

 *

 * <p>

 *

 * @author cs12110 2018年11月16日

 * @see

 * @since 1.0

 */

public class FormatText {

public static void main(String[] args) {

try {

RandomAccessFile acf = new RandomAccessFile("d://FormatText.java", "r")

String line

boolean isComment = true

while (null != (line = acf.readLine())) {

// 去除前后空格

// line.trim()

String noneSpaceLine = removeAllSpace(line)

// 简单的注解

if (isSimpleComment(noneSpaceLine)) {

continue

}

// 多行注解

if (noneSpaceLine.startsWith("/*")) {

isComment = true

}

if (isComment && noneSpaceLine.endsWith("*/")) {

isComment = false

continue

}

if (!isComment) {

System.out.println(noneSpaceLine)

}

}

acf.close()

} catch (Exception e) {

e.printStackTrace()

}

}

private static boolean isSimpleComment(String line) {

if (line.startsWith("//")) {

return true

}

return false

}

/**

 * 注意: 这里移除所有的空格,如果只想移除前后两端的,请使用: line.trim()

 * 

 * @param line

 *            行

 * @return String

 */

private static String removeAllSpace(String line) {

StringBuilder b = new StringBuilder(line.length())

for (char ch : line.toCharArray()) {

int num = (int) ch

if (num != 9 && num != 32) {

b.append(ch)

}

}

return b.toString()

}

}

测试数据为上面的java文件,测试结果如下

publicclassFormatText{

publicstaticvoidmain(String[]args){

try{

RandomAccessFileacf=newRandomAccessFile("d://FormatText.java","r")

Stringline

while(null!=(line=acf.readLine())){

StringnoneSpaceLine=removeAllSpace(line.trim())

if(isSimpleComment(noneSpaceLine)){

continue

}

System.out.println(noneSpaceLine)

}

acf.close()

}catch(Exceptione){

e.printStackTrace()

}

}

privatestaticbooleanisSimpleComment(Stringline){

if(line.startsWith("//")){

returntrue

}

returnfalse

}

privatestaticStringremoveAllSpace(Stringline){

StringBuilderb=newStringBuilder(line.length())

for(charch:line.toCharArray()){

if(ch!=''){

b.append(ch)

}

}

returnb.toString()

}

}