Search code examples
javajava-8niojava-io

Java 8: How to copy files written in a list to a TXT file from one directory to another directory?


I have a simple text file called small_reports.txt that looks like:

report_2021_05_02.csv
report_2021_05_05.csv
report_2021_06_08.csv
report_2021_06_25.csv
report_2021_07_02.csv

This reported is generated with my java code and takes in each of these files from the directory /work/dir1/reports and writes them into the file combined_reports.txt and then places the txt file back into /work/dir1/reports.

My question is, for each line in small_reports.txt, find that same file (line) in /work/dir1/reports and then COPY them to a new directory called /work/dir1/smallreports?

Using Java 8 & NIO (which is really helpful and good) I have tried:

Path source = Paths.get("/work/dir1/reports/combined_reports.txt");
Path target = Paths.get("/work/dir1/smallreports/", "combined_reports.txt");
        
if (Files.notExists(target) && target != null) {
    Files.createDirectories(Paths.get(target.toString()));
}
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);

But this is just copying the actual txt file combined_reports.txt into the new directory and not the contents inside like i thought it would.


Solution

  • final String SOURCE_DIR = "/tmp";
    final String TARGET_DIR = "/tmp/root/delme";
    List<String> csvFileNames = Files.readAllLines(FileSystems.getDefault().getPath("small_reports.txt"), Charset.forName("UTF-8"));
    
    for (String csvFileName : csvFileNames) {
        Path source = Paths.get(SOURCE_DIR, csvFileName);
        Path target = Paths.get(TARGET_DIR, csvFileName);
        if (Files.notExists(target) && target != null) {
            Files.createDirectories(Paths.get(target.toString()));
        }
        Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
    }
    

    Should do it for you. Obviously change the constants appropriately