Переименуйте список имен файлов с именами другого списка с помощью Java - PullRequest
0 голосов
/ 30 ноября 2018
import java.io.*;

public class Main {

    public static void main(String[] args) {


        // change file names in 'Directory':
        String absolutePath = "/storage/emulated/0/Gadm";
        File dir = new File(absolutePath);
        File[] filesInDir = dir.listFiles();
        int i = 0;



        for(File file:filesInDir) {

            i++;



            String[] iso = {
                "AFG",
                "XAD",
                "ALA",
                "ZWE"};


            String[] country = {
                "Afghanistan",
                "Akrotiri and Dhekelia",
                "Åland",
                "Zimbabwe"};


        String name = file.getName();
        String newName = name.replace(iso[i],country[i]);



        String newPath = absolutePath + "/" + newName;
        file.renameTo(new File(newPath));

          System.out.println(name + " has been changed to " + newName);
        }


    }
}

У меня есть каталог с именем Gadm Он содержит список файлов с именами в соответствии с iso-кодом стран, например iso.kmz Я бы переименовал все имена файлов с соответствующим именем страны, чтобы они стали country.kmz

имена iso, хранящиеся в массиве, а также имена стран и в правильном порядке.

Я пробовал этот код выше, но он не работает

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

В качестве альтернативы вы можете использовать Path вместо File:

public static void rename(Path source) throws IOException {
    Map<String, String> countries = countries.get();

    Files.list(source)
         .filter(path -> Files.isRegularFile(path))
         .filter(path -> countries.containsKey(getFileName.apply(path)))
         .forEach(path -> {
             try {
                 Files.move(path, source.resolve(countries.get(getFileName.apply(path)) + getFileExt.apply(path)));
             } catch(IOException e) {
                 e.printStackTrace();
             }
         });
}

private static final Function<Path, String> getFileName = path -> {
    String fileName = path.getFileName().toString();
    return fileName.substring(0, fileName.lastIndexOf('.')).toUpperCase();
};

private static final Function<Path, String> getFileExt = path -> {
    String fileName = path.getFileName().toString();
    return fileName.substring(fileName.lastIndexOf('.'));
};

private static Supplier<Map<String, String>> countries = () -> {
    Map<String, String> map = new HashMap<>();
    map.put("AFG", "Afghanistan");
    map.put("XAD", "Akrotiri and Dhekelia");
    map.put("ALA", "Åland");
    map.put("ZWE", "Zimbabwe");
    return Collections.unmodifiableMap(map);
};

Код клиента: rename(Paths.get("h:/gadm"))

0 голосов
/ 30 ноября 2018

Вместо использования двух массивов, я бы использовал одну HashMap, где ключи - это коды ISO страны, а значение - имя соответствующей страны.Нравится:

String absolutePath = "/storage/emulated/0/Gadm/";
HashMap<String, String> countryCodes = new HashMap<>();
countryCodes.put("AFG","Afghanistan");
countryCodes.put("XAD","Akrotiri and Dhekelia");
countryCodes.put("ALA","Åland");
countryCodes.put("ZWE","Zimbabwe");

for(Map.Entry<String, String> entry : countryCodes.entrySet()) {
    File file = new File(absolutePath + entry.getKey());
    if (file.renameTo(new File(absolutePath + entry.getValue()))) {
        System.out.println("Successfully renamed " + entry.getKey() + " to " + entry.getValue());
    } else {
        System.out.println("Failed to rename " + entry.getKey() + " to " + entry.getValue() +
                ". Please make sure filepath exists: " + absolutePath + entry.getKey());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...