package java_Studing_day51_IO流11_综合练习;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**************************
* 练习1:
* 获取指定目录下的指定扩展名的文件(包含子目录)
* 然后将这些文件的绝对路径写入到一个文本文件中中
*
*
* 解析:建立一个指定拓展名文件的列表
*
* 思路:
* 1.必须进行深度遍历
* 2.遍历的过程中遍历,将符合条件的内容存储到容器中
* 3.对容器中的内容进行遍历,并将绝对路径写入到文件中
*
*
* */
public class IoPractice1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//给定目录或者盘符
File dir=new File("F:\\");
//描述一个过滤器
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir,String name){
//f返回以.jpg结尾的文件
return name.endsWith(".java");
}
};
//创建arraylist容器,arraylist长度可变的数组结构列表
List<File> list=new ArrayList<File>();
getFile(dir,filter,list);
//指定结果存放的位置
File destFile=new File(dir,"txtFilePath1.txt");
writeToFile(list,destFile);
File f=new File(dir,"javaFilePath.txt");
destFile.renameTo(f);
}
/******
* 对指定目录中的内容进行遍历,并按照指定过滤器进行过滤
* 将过滤后的内容存储到指定容器list中
*
*
* */
public static void getFile(File dir,FilenameFilter filter,List<File> list){
//获取指定目录下的文件 ,返回抽象路径名
File[] files=dir.listFiles();
//遍历路径名数组
for(File file:files){
//如果是目录或者文件夹
if(file.isDirectory()){
//递归啦!继续遍历
getFile(file,filter,list);
}else{
//否则判断是否符合过滤器条件
if(filter.accept(dir, file.getName()))
//添加到list表中
list.add(file);
}
}
}
/************
* 将获取到的路劲列表写到本地文件中
* @throws IOException
*
*
* */
public static void writeToFile(List<File> list,File destFile) {//传进去两个参数,一个数据源,一个接收结果,程序里边一倒腾
BufferedWriter bfw=null;
try {
//开一个写入流
bfw = new BufferedWriter(new FileWriter(destFile));
//遍历集合列表中的每一个文件路径封装成的File对象
for(File file:list){
//获取绝对路径并写入
bfw.write(file.getAbsolutePath());
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("写入失败");
}
//保证程序异常时,流也能关闭
finally{
if(bfw!=null)
try {
bfw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("关闭失败");
}
}
}
}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**************************
* 练习1:
* 获取指定目录下的指定扩展名的文件(包含子目录)
* 然后将这些文件的绝对路径写入到一个文本文件中中
*
*
* 解析:建立一个指定拓展名文件的列表
*
* 思路:
* 1.必须进行深度遍历
* 2.遍历的过程中遍历,将符合条件的内容存储到容器中
* 3.对容器中的内容进行遍历,并将绝对路径写入到文件中
*
*
* */
public class IoPractice1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//给定目录或者盘符
File dir=new File("F:\\");
//描述一个过滤器
FilenameFilter filter=new FilenameFilter(){
public boolean accept(File dir,String name){
//f返回以.jpg结尾的文件
return name.endsWith(".java");
}
};
//创建arraylist容器,arraylist长度可变的数组结构列表
List<File> list=new ArrayList<File>();
getFile(dir,filter,list);
//指定结果存放的位置
File destFile=new File(dir,"txtFilePath1.txt");
writeToFile(list,destFile);
File f=new File(dir,"javaFilePath.txt");
destFile.renameTo(f);
}
/******
* 对指定目录中的内容进行遍历,并按照指定过滤器进行过滤
* 将过滤后的内容存储到指定容器list中
*
*
* */
public static void getFile(File dir,FilenameFilter filter,List<File> list){
//获取指定目录下的文件 ,返回抽象路径名
File[] files=dir.listFiles();
//遍历路径名数组
for(File file:files){
//如果是目录或者文件夹
if(file.isDirectory()){
//递归啦!继续遍历
getFile(file,filter,list);
}else{
//否则判断是否符合过滤器条件
if(filter.accept(dir, file.getName()))
//添加到list表中
list.add(file);
}
}
}
/************
* 将获取到的路劲列表写到本地文件中
* @throws IOException
*
*
* */
public static void writeToFile(List<File> list,File destFile) {//传进去两个参数,一个数据源,一个接收结果,程序里边一倒腾
BufferedWriter bfw=null;
try {
//开一个写入流
bfw = new BufferedWriter(new FileWriter(destFile));
//遍历集合列表中的每一个文件路径封装成的File对象
for(File file:list){
//获取绝对路径并写入
bfw.write(file.getAbsolutePath());
bfw.newLine();
bfw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("写入失败");
}
//保证程序异常时,流也能关闭
finally{
if(bfw!=null)
try {
bfw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
throw new RuntimeException("关闭失败");
}
}
}
}