使用Java重命名文件
我们可以重命名文件test.txt
test1.txt
?
如果test1.txt
存在将重命名?
如何将其重命名为已存在的test1.txt文件,以便将test.txt的新内容添加到其中供以后使用?
复制自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*/);
简而言之:
Files.move(source, source.resolveSibling("newname"));
更多详情:
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths;
以下内容直接从http://docs.oracle.com/javase/7/docs/api/index.html复制:;
假设我们要将文件重命名为“newname”,将文件保存在同一个目录中:
Path source = Paths.get("path/here"); Files.move(source, source.resolveSibling("newname"));
或者,假设我们要将文件移动到新目录,保持相同的文件名,并replace该目录中的任何现有文件:
Path source = Paths.get("from/path"); Path newdir = Paths.get("to/path"); Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
你想在File对象上使用renameTo方法。
首先,创build一个File对象来表示目标。 检查该文件是否存在。 如果不存在,请为要移动的文件创build一个新的File对象。 调用要移动的文件上的renameTo方法,并检查来自renameTo的返回值以查看调用是否成功。
如果要将一个文件的内容附加到另一个文件的内容,则可以使用多个作者。 基于扩展名,这听起来像是纯文本,所以我会看FileWriter 。
对于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+,你应该看到并赞成kr37的答案。
通过将文件移动到新名称来重命名文件。 (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(); }
这是重命名文件的简单方法:
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"); }
如果只是重命名该文件,则可以使用File.renameTo() 。
在想要将第二个文件的内容附加到第一个文件的情况下, 使用append构造函数选项查看FileOutputStream,或者使用FileWriter的相同内容 。 您需要读取文件的内容,使用输出stream/写入器将其附加写出。
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"));
replace名称为“text1.txt”的现有文件:
Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
据我所知,重命名文件不会将其内容追加到具有目标名称的现有文件的内容。
关于在Java中重命名文件,请参阅File
类中的renameTo()
方法的File
。
Files.move(file.toPath(), fileNew.toPath());
工作,但只有当你closures(或autoclose)所有使用的资源( InputStream
, FileOutputStream
等)我认为与file.renameTo
或file.renameTo
相同的情况。
运行代码在这里。
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(); } } }