Search code examples
javafilecopynio

Trying to copy files in specified path with specified extension and replace them with new extension


I have most of it down but when I try to make the copy, no copy is made. It finds the files in the specified directory like it is supposed to do and I think the copy function executes but there aren't any more files in the specified directory. Any help is appreciated. I made a printf function that isn't shown here. Thanks!

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Scanner;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.FileUtils;

import static java.nio.file.StandardCopyOption.*;

public class Stuff {
static String path, oldExtn, newExtn;
static Boolean delOrig = false;

private static void getPathStuff() {
    printf("Please enter the desired path\n");
    Scanner in = new Scanner(System.in);
    path = in.next();
    printf("Now enter the file extension to replace\n");
    oldExtn = in.next();
    printf("Now enter the file extension to replace with\n");
    newExtn = in.next();
    in.close();
}

public static void main(String[] args) {
    getPathStuff();
    File folder = new File(path);
    printf("folder = %s\n", folder.getPath());

    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.getName().endsWith(oldExtn)) {
            printf(fileEntry.getName() + "\n");
            File newFile = new File(FilenameUtils.getBaseName(fileEntry
                    .getName() + newExtn));
            try {
                printf("fileEntry = %s\n", fileEntry.toPath().toString());
                Files.copy(fileEntry.toPath(), newFile.toPath(),
                        REPLACE_EXISTING);
            } catch (IOException e) {
                System.err.printf("Exception");
            }
        }
    }
}

}`


Solution

  • The problem is that the new file is created without a full path (only the file name). So your new file is created - only not where you expect...

    You can see that it'll work if you'll replace:

    File newFile = new File(FilenameUtils.getBaseName(fileEntry
                        .getName() + newExtn));
    

    with:

    File newFile = new File(fileEntry.getAbsolutePath()
           .substring(0,
                      fileEntry.getAbsolutePath()
                               .lastIndexOf(".")+1) + newExtn);