打印目录中多个文件的所有内容

时间:2016-11-22 00:55:31

标签: java list file methods directory

我在下面看到如下代码,此代码查看目录,然后打印所有不同的文件名。现在我的问题是,我将如何更改我的代码,以便它还可以打印出它找到/打印的文件中的所有内容?举个例子,假设代码在目录中找到3个文件,然后打印出这3个文件中的所有内容。

import java.io.File;
import java.io.IOException;

public class EScan {


static String usernamePc = System.getProperty("user.name");
final static File foldersPc = new File("/Users/" + usernamePc + "/Library/Mail/V2");

public static void main(String[] args) throws IOException {

    listFilesForFolder(foldersPc);

}

public static void listFilesForFolder(final File foldersPc) throws IOException {
    for (final File fileEntry : foldersPc.listFiles()) {
        if (fileEntry.isDirectory()) {
            listFilesForFolder(fileEntry);
        } else {
            System.out.println(fileEntry.getName());
        }
    }
}

}

3 个答案:

答案 0 :(得分:1)

我在发布前测试过它。它正在发挥作用。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author EdwinAdeola
 */
public class TestPrintAllFiles {

    public static void main(String[] args) {
        //Accessing the folder path
        File myFolder = new File("C:\\Intel");
        File[] listOfFiles = myFolder.listFiles();
        String fileName, line = null;
        BufferedReader br;
        //For each loop to print the content of each file
        for (File eachFile : listOfFiles) {
            if (eachFile.isFile()) {
                try {
                    //System.out.println(eachFile.getName());
                    fileName = eachFile.getAbsolutePath();
                    br = new BufferedReader(new FileReader(fileName));

                    try {
                        while ((line = br.readLine()) != null) {
                            System.out.println(line);
                        }
                    } catch (IOException ex) {
                        Logger.getLogger(TestPrintAllFiles.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(TestPrintAllFiles.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}

答案 1 :(得分:0)

您可以使用扫描仪阅读文件的内容

try {
        Scanner sc = new Scanner(fileEntry);

        while (sc.hasNextLine()) {
            String s = sc.nextLine();
            System.out.println(s);
        }

        sc.close();
    } catch (Exception e) {
        e.printStackTrace();
}

答案 2 :(得分:0)

如果您找到合适的话,可以再试一次:

package com.grs.stackOverFlow.pack10;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;
import java.util.List;

public class EScan {

    public static void main(String[] args) throws IOException {

        File dir=new File("C:/your drive/");
        List<File> files = Arrays.asList(dir.listFiles(f->f.isFile())); 
//if you want you can filter files like f->f.getName().endsWtih(".csv")

        for(File f: files){
            List<String> lines = Files.readAllLines(f.toPath(),Charset.defaultCharset());
            //processing line  
            lines.forEach(System.out::println);
        }
    }
}

上面的代码可以通过多种方式利用,比如处理行可以修改为在行周围添加引号,如下所示:

lines.stream().map(t-> "'" + t+"'").forEach(System.out::println);

或仅打印错误消息行

lines.stream().filter(l->l.contains("error")).forEach(System.out::println);

测试以上代码和变体。