使用Java重命名文件

我们可以将一个文件,比如test.txt重命名为test1.txt吗?

如果test1.txt存在,它会重命名吗?

如何将其重命名为已经存在的test1.txt文件,以便将test.txt的新内容添加到其中以供以后使用?

517160 次浏览

据我所知,重命名文件不会将其内容附加到具有目标名称的现有文件中。

关于在Java中重命名一个文件,请参阅文档类中的renameTo()方法。

你想在文件对象上使用renameTo方法。

首先,创建一个File对象来表示目的地。检查该文件是否存在。如果它不存在,为要移动的文件创建一个新的File对象。在要移动的文件上调用renameTo方法,并检查renameTo的返回值,以查看调用是否成功。

如果要将一个文件的内容附加到另一个文件,有许多可用的写入器。基于扩展,它听起来像是纯文本,所以我会查看FileWriter

http://exampledepot.8waytrips.com/egs/java.io/RenameFile.html复制

// File (or directory) with old name
File file = new File("oldname");


// File (or directory) with new name
File file2 = new File("newname");


if (file2.exists())
throw new java.io.IOException("file exists");


// Rename file (or directory)
boolean success = file.renameTo(file2);


if (!success) {
// File was not successfully renamed
}

添加到新文件:

java.io.FileWriter out= new java.io.FileWriter(file2, true /*append=yes*/);

如果只是重命名文件,你可以使用File.renameTo ()

如果你想将第二个文件的内容追加到第一个文件,请查看带有附加构造函数选项的FileOutputStreamFileWriter也是如此。您需要读取文件的内容来追加,并使用输出流/写入器将它们写出来。

通过将文件移动到新名称来重命名文件。(FileUtils来自Apache Commons IO lib)

  String newFilePath = oldFile.getAbsolutePath().replace(oldFile.getName(), "") + newName;
File newFile = new File(newFilePath);


try {
FileUtils.moveFile(oldFile, newFile);
} catch (IOException e) {
e.printStackTrace();
}

对于Java 1.6及以下版本,我相信最安全、最干净的API是Guava的Files.move

例子:

File newFile = new File(oldFile.getParent(), "new-file-name.txt");
Files.move(oldFile.toPath(), newFile.toPath());

第一行确保新文件的位置是同一目录,即旧文件的父目录

<强>编辑: 我是在开始使用Java 7之前写的这篇文章,Java 7引入了非常类似的方法。所以如果你使用Java 7+,你应该看到并投票kr37的答案

简而言之:

Files.move(source, source.resolveSibling("newname"));

更多的细节:

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

下面是直接从http://docs.oracle.com/javase/7/docs/api/index.html复制的:

假设我们想要将一个文件重命名为"newname",保持文件在相同的目录下:

Path source = Paths.get("path/here");
Files.move(source, source.resolveSibling("newname"));

或者,假设我们想要移动一个文件到新的目录,保持相同的文件名,并替换目录中任何现有的该名称的文件:

Path source = Paths.get("from/path");
Path newdir = Paths.get("to/path");
Files.move(source, newdir.resolve(source.getFileName()), StandardCopyOption.REPLACE_EXISTING);

这是一个简单的重命名文件的方法:

        File oldfile =new File("test.txt");
File newfile =new File("test1.txt");


if(oldfile.renameTo(newfile)){
System.out.println("File renamed");
}else{
System.out.println("Sorry! the file can't be renamed");
}
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static java.nio.file.StandardCopyOption.*;


Path yourFile = Paths.get("path_to_your_file\text.txt");


Files.move(yourFile, yourFile.resolveSibling("text1.txt"));

使用实例替换一个名为“text1.txt”的文件。

Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
Files.move(file.toPath(), fileNew.toPath());

工作,但只有当你关闭(或自动关闭)所有使用的资源(InputStreamFileOutputStream等)我认为同样的情况与file.renameToFileUtils.moveFile

运行代码在这里。

private static void renameFile(File fileName) {


FileOutputStream fileOutputStream =null;


BufferedReader br = null;
FileReader fr = null;


String newFileName = "yourNewFileName"


try {
fileOutputStream = new FileOutputStream(newFileName);


fr = new FileReader(fileName);
br = new BufferedReader(fr);


String sCurrentLine;


while ((sCurrentLine = br.readLine()) != null) {
fileOutputStream.write(("\n"+sCurrentLine).getBytes());
}


fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
if (br != null)
br.close();


if (fr != null)
fr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

试试这个

File file=new File("Your File");
boolean renameResult = file.renameTo(new File("New Name"));
// todo: check renameResult

<强>注意: 我们应该总是检查renameTo返回值,以确保重命名文件成功,因为它依赖于平台(不同的操作系统,不同的文件系统),如果重命名失败,它不会抛出IO异常

这是我的代码重命名多个文件在一个文件夹成功:

public static void renameAllFilesInFolder(String folderPath, String newName, String extension) {
if(newName == null || newName.equals("")) {
System.out.println("New name cannot be null or empty");
return;
}
if(extension == null || extension.equals("")) {
System.out.println("Extension cannot be null or empty");
return;
}


File dir = new File(folderPath);


int i = 1;
if (dir.isDirectory()) { // make sure it's a directory
for (final File f : dir.listFiles()) {
try {
File newfile = new File(folderPath + "\\" + newName + "_" + i + "." + extension);


if(f.renameTo(newfile)){
System.out.println("Rename succesful: " + newName + "_" + i + "." + extension);
} else {
System.out.println("Rename failed");
}
i++;
} catch (Exception e) {
e.printStackTrace();
}
}
}


}

并运行它作为一个例子:

renameAllFilesInFolder("E:\\Downloads\\Foldername", "my_avatar", "gif");

是的,您可以使用File.renameTo()。但是,在将其重命名为新文件时,请记住要有正确的路径。

import java.util.Arrays;
import java.util.List;


public class FileRenameUtility {
public static void main(String[] a) {
System.out.println("FileRenameUtility");
FileRenameUtility renameUtility = new FileRenameUtility();
renameUtility.fileRename("c:/Temp");
}


private void fileRename(String folder){
File file = new File(folder);
System.out.println("Reading this "+file.toString());
if(file.isDirectory()){
File[] files = file.listFiles();
List<File> filelist = Arrays.asList(files);
filelist.forEach(f->{
if(!f.isDirectory() && f.getName().startsWith("Old")){
System.out.println(f.getAbsolutePath());
String newName = f.getAbsolutePath().replace("Old","New");
boolean isRenamed = f.renameTo(new File(newName));
if(isRenamed)
System.out.println(String.format("Renamed this file %s to  %s",f.getName(),newName));
else
System.out.println(String.format("%s file is not renamed to %s",f.getName(),newName));
}
});


}
}

我不喜欢java.io.File.renameTo(…),因为有时它不重命名文件,你不知道为什么!它只返回true (false)如果失败,它不会抛出异常。

另一方面,java.nio.file.Files.move(…)更有用,因为它会在失败时抛出异常。