找出你的E盘里的所有.avi文件,并将这些文件的文件名打印到一个文本文件里
- 整体思路
- 封装两个方法——文件过滤器和输出流
- 过滤器 ——判断是文件 ——以.avi结尾?
判断是文件夹——遍历文件夹,递归调用自身
package com.cskaoyan.Day16_HomeWork;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author JokerHu
*
*/
public class Java_4
{
public static void main(String[] args)
{
File file = new File("E:");
File file2 = new File("E://1.txt");
findAviFiles(file, file2);
}
/**
* 接收查找好的文件File并将其名字输出打印到E://1.txt
*
* @param file
* @param file2
*/
public static void output(File file, File file2)
{
// 声明文件输出流
FileOutputStream fos = null;
try
{
// 构造一个向指定 File表示的文件写入数据,true为追加写入,默认false为覆盖
fos = new FileOutputStream(file2, true);
String data = file.getAbsolutePath() + "\r\n";
// 用byte数组接收文件名
byte[] bs = data.getBytes();
// 输出到文本
fos.write(bs);
System.out.println("已写入" + file.getAbsolutePath());
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (fos != null)
{
try
{
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
/**
* 文件过滤器
*
* @param file
* @param file2
*/
public static void findAviFiles(File file, File file2)
{
if (file.exists())
{
// 是文件则直接输出
if (file.isFile())
{
// 判断文件后缀,Sting类endsWith方法判断字符串是否以.avi结尾
if (file.getName().endsWith(".avi"))
{
output(file, file2);
}
else
return;
}
// 是目录,则用File类型数组list接收目录中的文件的抽象路径名
else if (file.isDirectory())
{
File[] listFiles = file.listFiles();
// 此文件夹目录为空 递归出口
if (listFiles == null)
{
return;
}
// foreach递归遍历
for (File file3 : listFiles)
{
findAviFiles(file3, file2);
}
}
else
return;
}
}
}
控制台输出
输出文本