I/O流之FileWriter【获取当前目录下所有子文件的绝对路径】

时间:2020-11-25 09:12:48

 

需求:

1、编写程序,在main方法中,在当前目录下(项目目录)创建一个新目录newDir;

2、获取当前目录(项目目录)中所有文件列表信息,把这些信息写到目录newDir中的info.txt文件中


 

方法1:使用ArrayList<String>存储当前目录下所有文件的绝对路径

 

package 课后练习;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;

public class FileDemo {
    public static void main(String[] args) {
        FileDemo fileDemo = new FileDemo();
        // 创建数组链表存储文件路径
        ArrayList<String> info = new ArrayList<String>();
        BufferedWriter bw = null;
        
        try {
            // 创建newDir
            File file = new File("newDir");
            file.mkdir(); 
            
            // 在newDir下创建文件info.txt
            File newFile = new File("newDir/info.txt");
            newFile.createNewFile();
            
            // 获取当前目录
            File currentDir = new File("E:\\04_北京惠科培训\\JavaSECode\\7月\\Me\\day16");
            
            // 创建文件输出流对象
            bw = new BufferedWriter(new FileWriter(newFile));
            ArrayList<String> fileInfo = fileDemo.getFileInfo(currentDir, info);
            
            // 将数组链表中的数据写入Info.txt文件
            for (String s : fileInfo) {
                bw.write(s+"\n");
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**功能: 获取当前目录(项目目录)中所有文件列表信息
     * @param file 当前目录
     * @param str 存储文件的绝对路径
     * @return 返回所有当前目录下的文件路径
     */
    public ArrayList<String> getFileInfo(File file, ArrayList<String> str) {
        // 获取当前目录下的文件
        File[] listFiles = file.listFiles();
        // 如果文件链表为空或长度为0,则代表该文件没有子文件
        if (listFiles == null || listFiles.length == 0) {
            return null;
        }
        // 否则遍历该文件夹下的子文件
        for (File f : listFiles) {
            if (f.isDirectory()) {
                getFileInfo(f, str);
            } else {
                str.add(f.getAbsolutePath());
            }
        }
        return str;
    }

}

 


 方法2:使用StringBuilder存储当前目录下所有文件的绝对路径

package 课后练习;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;

public class FileDemo {
    public static void main(String[] args) {
        FileDemo fileDemo = new FileDemo();
        // 创建StringBuilder存储文件路径
        StringBuilder sb = new StringBuilder();
        BufferedWriter bw = null;
        
        try {
            // 创建newDir
            File file = new File("newDir");
            file.mkdir(); 
            
            // 在newDir下创建文件info.txt
            File newFile = new File("newDir/info.txt");
            newFile.createNewFile();
            
            // 获取当前目录
            File currentDir = new File("E:\\04_北京惠科培训\\JavaSECode\\7月\\Me\\day16");
            
            // 创建文件输出流对象
            bw = new BufferedWriter(new FileWriter(newFile));
            
            StringBuilder fileInfo = fileDemo.getFileInfo(currentDir, sb);
            String str = sb.toString();
            bw.write(str);
    
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bw != null) {
                try {
                    bw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**功能: 获取当前目录(项目目录)中所有文件列表信息
     * @param file 当前目录
     * @param str 存储文件的绝对路径
     * @return 返回所有当前目录下的文件路径
     */public StringBuilder getFileInfo(File file, StringBuilder str) {
        // 获取当前目录下的文件
        File[] listFiles = file.listFiles();
        // 如果文件链表为空或长度为0,则代表该文件没有子文件
        if (listFiles == null || listFiles.length == 0) {
            return null;
        }
        // 否则遍历该文件夹下的子文件
        for (File f : listFiles) {
            if (f.isDirectory()) {
                getFileInfo(f, str);
            } else {
                str.append(f.getAbsolutePath()+"\n");
            }
        }
        return str;
    }

}

 

运行结果:

I/O流之FileWriter【获取当前目录下所有子文件的绝对路径】