Podemos renomear um arquivo test.txt
para test1.txt
?
Se test1.txt
existir, será renomeado?
Como o renomeio para o arquivo test1.txt já existente, para que o novo conteúdo do test.txt seja adicionado a ele para uso posterior?
Podemos renomear um arquivo test.txt
para test1.txt
?
Se test1.txt
existir, será renomeado?
Como o renomeio para o arquivo test1.txt já existente, para que o novo conteúdo do test.txt seja adicionado a ele para uso posterior?
Respostas:
Copiado de 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
}
Para acrescentar ao novo arquivo:
java.io.FileWriter out= new java.io.FileWriter(file2, true /*append=yes*/);
Path
caminho está funcionando para mim, renameTo
sempre retorna falso. Verifique a resposta de kr37 ou esta resposta
Em resumo:
Files.move(source, source.resolveSibling("newname"));
Mais detalhes:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
O seguinte é copiado diretamente de http://docs.oracle.com/javase/7/docs/api/index.html :
Suponha que desejamos renomear um arquivo para "newname", mantendo o arquivo no mesmo diretório:
Path source = Paths.get("path/here");
Files.move(source, source.resolveSibling("newname"));
Como alternativa, suponha que desejemos mover um arquivo para um novo diretório, mantendo o mesmo nome e substituindo qualquer arquivo existente com esse nome no diretório:
Path source = Paths.get("from/path");
Path newdir = Paths.get("to/path");
Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
Você deseja utilizar o método renameTo em um objeto File .
Primeiro, crie um objeto File para representar o destino. Verifique se esse arquivo existe. Se não existir, crie um novo objeto File para o arquivo a ser movido. chame o método renameTo no arquivo a ser movido e verifique o valor retornado de renameTo para ver se a chamada foi bem-sucedida.
Se você deseja anexar o conteúdo de um arquivo a outro, há vários escritores disponíveis. Com base na extensão, parece que é um texto sem formatação, então eu examinaria o FileWriter .
Para Java 1.6 e inferior, acredito que a API mais segura e limpa para isso é o Files.move do Guava .
Exemplo:
File newFile = new File(oldFile.getParent(), "new-file-name.txt");
Files.move(oldFile.toPath(), newFile.toPath());
A primeira linha garante que o local do novo arquivo seja o mesmo diretório, ou seja, o diretório pai do arquivo antigo.
Edição: Eu escrevi isso antes de começar a usar o Java 7, que introduziu uma abordagem muito semelhante. Portanto, se você estiver usando o Java 7+, deverá ver e atualizar a resposta do kr37.
Renomeando o arquivo movendo-o para um novo nome. (FileUtils é do 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();
}
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"));
Para substituir um arquivo existente pelo nome "text1.txt":
Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
Tente isto
File file=new File("Your File");
boolean renameResult = file.renameTo(new File("New Name"));
// todo: check renameResult
Nota: Devemos sempre verificar o valor de retorno renameTo para garantir que o arquivo renomeado seja bem-sucedido, pois depende da plataforma (sistema operacional diferente, sistema de arquivos diferente) e não gera exceção de E / S se a renomeação falhar.
Sim, você pode usar File.renameTo (). Mas lembre-se de ter o caminho correto ao renomeá-lo para um novo arquivo.
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));
}
});
}
}
}
Se for apenas renomear o arquivo, você pode usar File.renameTo () .
No caso em que você deseja anexar o conteúdo do segundo arquivo ao primeiro, dê uma olhada no FileOutputStream com a opção de construtor de acréscimo ou A mesma coisa para o FileWriter . Você precisará ler o conteúdo do arquivo para anexá-lo e gravá-lo usando o fluxo / gravador de saída.
Tanto quanto eu sei, renomear um arquivo não anexará seu conteúdo ao de um arquivo existente com o nome do destino.
Sobre como renomear um arquivo em Java, consulte a documentação para o renameTo()
método em sala de aula File
.
Files.move(file.toPath(), fileNew.toPath());
funciona, mas somente quando você fecha (ou fecha automaticamente) TODOS os recursos usados ( InputStream
, FileOutputStream
etc.) acho que a mesma situação com file.renameTo
ou FileUtils.moveFile
.
Aqui está o meu código para renomear vários arquivos em uma pasta com sucesso:
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();
}
}
}
}
e execute-o como um exemplo:
renameAllFilesInFolder("E:\\Downloads\\Foldername", "my_avatar", "gif");
O código em execução está aqui.
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();
}
}
}