【问题标题】:Print all content from multiple files in directory打印目录中多个文件的所有内容
【发布时间】:2017-04-05 13:15:18
【问题描述】:

我在下面看到了以下代码,此代码查看目录,然后打印所有不同的文件名。现在我的问题是,我将如何更改我的代码,以便它也打印出它找到/打印的文件中的所有内容?例如,假设代码在目录中找到 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());
        }
    }
}

}

【问题讨论】:

    标签: java list file methods directory


    【解决方案1】:

    如果你觉得合适,你可以尝试另一种方法:

    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);
    

    测试以上代码和变体。

    【讨论】:

    • 我很欣赏代码,我刚刚测试过。它在开始时没有任何错误,但是在编译代码时会出现几个不同的错误。请查看此屏幕截图以查看。 (snag.gy/keN3Wo.jpg)
    • @fsharpsquare : 我添加了新的更新以在读取文件时使用默认字符集。它现在应该可以工作了。但如果问题仍然存在,您可以尝试更改字符集,例如 Files.readAllLines(f.toPath(),Charset.forName("UTF-8");
    【解决方案2】:

    我在发布之前对其进行了测试。它正在工作。

    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);
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 我很欣赏这段代码,我刚刚测试过它,它编译时没有任何问题。代码的输出是一些非常奇怪的字符,例如带有 ? 的黑色方块。在里面。我不确定它是否与它正在读取的实际文件有关。我文件夹中的文件是 .emlx
    【解决方案3】:

    您可以使用 Scanner 来读取文件的内容

    try {
            Scanner sc = new Scanner(fileEntry);
    
            while (sc.hasNextLine()) {
                String s = sc.nextLine();
                System.out.println(s);
            }
    
            sc.close();
        } catch (Exception e) {
            e.printStackTrace();
    }
    

    【讨论】:

    • 我很欣赏这个代码,我应该在哪里将它添加到我的代码中?
    • 我刚刚测试了它,我把它放在了 else 语句中,它似乎可以工作了!非常感谢。如果您有时间,您是否知道是否有办法只打印文件中的电子邮件。因此,如果它找到一个包含 .com 或 @ 的词,那么它会打印该词?
    • 您可以先使用正则表达式来验证字符串是否是有效的电子邮件。 stackoverflow.com/questions/8204680/java-regex-email
    猜你喜欢
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 2015-06-22
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    相关资源
    最近更新 更多