我一直在尝试复制文件,但是在同一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);
答案 0 :(得分:2)
您可以在同一目录中创建一个新文件,然后将原始文件的内容复制到重复文件中 参见:Java read from one file and write into another file using methods 有关更多信息
您还可以使用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 :(得分:2)
最初尝试使用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 :(得分:1)
@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();
}
}