Как продублировать файл с другим именем в том же каталоге в Windows - PullRequest
1 голос
/ 14 марта 2019

Я пытался продублировать файл, но изменил его имя в том же каталоге Windows, но мне не повезло.

Я не могу просто скопировать файл в тот же каталог из-за правила Windows, котороедва файла не могут иметь одинаковые имена в одном и том же каталоге.

Мне не разрешено копировать его в другой каталог, затем переименовывать и затем перемещать обратно в тот же каталог.

И яне вижу никакой полезной реализации в File.class.

Пробовал что-то подобное, но это не сработало:

File file = new File(filePath);
File copiedFile = new File(filePath);
//then rename the copiedFile and then try to copy it
Files.copy(file, copiedFile);

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Первоначальная попытка будет использовать Path в зависимости от ситуации:

Path file = Paths.get(filePath);
String name = file.getFileName().toString();
String copiedName = name.replaceFirst("(\\.[^\\.]*)?$", "-copy$0");
Path copiedFile = file.resolveSibling(copiedName);
try {
    Files.copy(file, copiedFile);
} catch (IOException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
2 голосов
/ 14 марта 2019

Вы можете создать новый файл в том же каталоге, а затем просто скопировать содержимое исходного файла в дубликат См .: Java читает из одного файла и записывает в другой файл, используя методы Для получения дополнительной информации

Вы также можете использовать этот фрагмент из https://www.journaldev.com/861/java-copy-file

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}
1 голос
/ 14 марта 2019

@ Пьер, его код идеален, однако я использую его, поэтому не смогу изменить расширение:

public static void copyWithDifferentName(File sourceFile, String newFileName) {
    if (sourceFile == null || newFileName == null || newFileName.isEmpty()) {
        return;
    }
    String extension = "";
    if (sourceFile.getName().split("\\.").length > 1) {
        extension = sourceFile.getName().split("\\.")[sourceFile.getName().split("\\.").length - 1];
    }
    String path = sourceFile.getAbsolutePath();
    String newPath = path.substring(0, path.length() - sourceFile.getName().length()) + newFileName;
    if (!extension.isEmpty()) {
        newPath += "." + extension;
    }
    try (OutputStream out = new FileOutputStream(newPath)) {
        Files.copy(sourceFile.toPath(), out);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...