Java 如何在windows中的同一目录中复制给定不同名称的文件

Java 如何在windows中的同一目录中复制给定不同名称的文件,java,java-8,Java,Java 8,我一直在尝试复制一个文件,但在同一个windows目录中更改了它的名称,但没有成功 我不能将文件复制到同一个目录中,因为windows的规则是两个文件不能在同一个目录中具有相同的名称 我不允许将它复制到另一个目录,然后重命名它,然后将它移回同一个目录 我在File.class中没有看到任何有用的实现 尝试过类似的方法,但不起作用: File file = new File(filePath); File copiedFile = new File(filePath); //then rename

我一直在尝试复制一个文件,但在同一个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);

您可以在同一目录中创建一个新文件,然后将原始文件的内容复制到副本中 见: 更多信息

您也可以从中使用此代码段


您可以在同一目录中创建一个新文件,然后将原始文件的内容复制到副本中 见: 更多信息

您也可以从中使用此代码段


初步尝试将在适当时使用:

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

初步尝试将在适当时使用:

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

@Pierre他的代码非常完美,但我使用的是此代码,因此无法更改扩展名:

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

@Pierre他的代码非常完美,但我使用的是此代码,因此无法更改扩展名:

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


这些都是代码吗?文件的重命名位置在哪里?@runefist认为添加该文件没有意义,所以我只是添加了该步骤作为注释,为什么不创建一个新文件名?@reporter你是什么意思?如何创建文件名?windows的规则是两个文件不能在同一个目录中具有相同的名称。我认为任何操作系统都不会允许您在同一个目录中创建两个具有相同名称的文件。你想要两个内容完全相同的不同文件吗?这些都是代码吗?文件的重命名在哪里?@runefist没有想到添加这一点,所以我只是添加了这一步骤作为注释,为什么不创建一个新文件名?@reporter你是什么意思?如何创建文件名?windows的规则是两个文件不能在同一个目录中具有相同的名称。我认为任何操作系统都不会允许您在同一个目录中创建两个具有相同名称的文件。你想要两个内容完全相同的不同文件吗?但是如果文件是pdf、doc或docx呢?格式将如何应用于此?你可以一个字节一个字节地写,所以我认为应该可以,但这会破坏其中文本的格式,如果是docx的话,我想。非常重要的一点是,文件不可更改如果在字节级别写入,格式应保持不变,我还添加了一个EXM,但是如果文件是pdf、doc或docx,该怎么办?格式将如何应用于此?你可以一个字节一个字节地写,所以我认为应该可以,但这会破坏其中文本的格式,如果是docx的话,我想。这是非常重要的,文件是不被改变。如果你写在字节级的格式应该是不变的,我还添加了一个exmaple你有没有尝试过这段代码?一开始我看到它需要从路径转换到路径?或者我的ide有什么问题?@Sir.Hedgehog okay.hmmm类型文件中的copyFile,OutputStream方法不适用于参数路径,路径我们确定副本可以接受路径吗?请参阅-可以省略vararg复制选项,或者执行Files.copyFile,copiedFile,StandardCopyOption.REPLACE\u EXISTING;正确的java.nio.file.Files类?是的,我的自动驾驶仪也让我经常发生冲突。你试过这段代码吗?一开始我看到它需要从路径转换到路径?或者我的ide有什么问题?@Sir.Hedgehog okay.hmmm类型文件中的copyFile,OutputStream方法不适用于参数路径,路径我们确定副本可以接受路径吗?请参阅-可以省略vararg复制选项,或者执行Files.copyFile,copiedFile,StandardCopyOption.REPLACE\u EXISTING;正确的java.nio.file.Files类?是的,我的自动驾驶仪也让我经常发生争执。