Possiamo rinominare un file dire test.txt
a test1.txt
?
Se test1.txt
esiste rinominerà?
Come posso rinominarlo nel file test1.txt già esistente in modo che i nuovi contenuti di test.txt vengano aggiunti ad esso per un uso successivo?
Possiamo rinominare un file dire test.txt
a test1.txt
?
Se test1.txt
esiste rinominerà?
Come posso rinominarlo nel file test1.txt già esistente in modo che i nuovi contenuti di test.txt vengano aggiunti ad esso per un uso successivo?
Risposte:
Copiato da 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
}
Per aggiungere al nuovo file:
java.io.FileWriter out= new java.io.FileWriter(file2, true /*append=yes*/);
Path
modo in cui funziona per me, renameTo
restituisce sempre false. Controlla la risposta di kr37 o questa risposta
In breve:
Files.move(source, source.resolveSibling("newname"));
Più dettaglio:
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Quanto segue viene copiato direttamente da http://docs.oracle.com/javase/7/docs/api/index.html :
Supponiamo di voler rinominare un file in "newname", mantenendo il file nella stessa directory:
Path source = Paths.get("path/here");
Files.move(source, source.resolveSibling("newname"));
In alternativa, supponiamo di voler spostare un file in una nuova directory, mantenendo lo stesso nome file e sostituendo qualsiasi file esistente con quel nome nella directory:
Path source = Paths.get("from/path");
Path newdir = Paths.get("to/path");
Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
Si desidera utilizzare il metodo renameTo su un oggetto File .
Innanzitutto, crea un oggetto File per rappresentare la destinazione. Controlla se quel file esiste. Se non esiste, creare un nuovo oggetto File per il file da spostare. chiama il metodo renameTo sul file da spostare e controlla il valore restituito da renameTo per vedere se la chiamata è andata a buon fine.
Se si desidera aggiungere il contenuto di un file a un altro, sono disponibili numerosi scrittori. Basato sull'estensione, sembra che sia un testo semplice, quindi vorrei guardare FileWriter .
Per Java 1.6 e versioni precedenti , credo che l'API più sicura e pulita per questo sia Files.move di Guava .
Esempio:
File newFile = new File(oldFile.getParent(), "new-file-name.txt");
Files.move(oldFile.toPath(), newFile.toPath());
La prima riga si assicura che la posizione del nuovo file sia la stessa directory, ovvero la directory principale del vecchio file.
EDIT: ho scritto questo prima di iniziare a utilizzare Java 7, che ha introdotto un approccio molto simile. Quindi se stai usando Java 7+, dovresti vedere e migliorare la risposta di kr37.
Rinominare il file spostandolo su un nuovo nome. (FileUtils proviene da 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"));
Per sostituire un file esistente con il nome "text1.txt":
Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
Prova questo
File file=new File("Your File");
boolean renameResult = file.renameTo(new File("New Name"));
// todo: check renameResult
Nota: dovremmo sempre controllare il valore renamePer restituire il file per assicurarci che il file rinominato abbia successo perché dipende dalla piattaforma (sistema operativo diverso, file system diverso) e non genera eccezioni IO se la ridenominazione fallisce.
Sì, è possibile utilizzare File.renameTo (). Ma ricorda di avere il percorso corretto durante la ridenominazione in un nuovo file.
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 si sta semplicemente rinominando il file, è possibile utilizzare File.renameTo () .
Nel caso in cui desideri aggiungere i contenuti del secondo file al primo, dai un'occhiata a FileOutputStream con l'opzione di costruzione append o La stessa cosa per FileWriter . Dovrai leggere il contenuto del file per accodarlo e scriverlo usando lo stream / writer di output.
Per quanto ne so, rinominare un file non aggiungerà il suo contenuto a quello di un file esistente con il nome di destinazione.
Informazioni sulla ridenominazione di un file in Java, consultare la documentazione per il renameTo()
metodo in classe File
.
Files.move(file.toPath(), fileNew.toPath());
funziona, ma solo quando chiudi (o chiudi automaticamente) TUTTE le risorse utilizzate ( InputStream
, FileOutputStream
ecc.) Penso che la stessa situazione con file.renameTo
o FileUtils.moveFile
.
Ecco il mio codice per rinominare più file in una cartella correttamente:
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();
}
}
}
}
ed eseguilo per un esempio:
renameAllFilesInFolder("E:\\Downloads\\Foldername", "my_avatar", "gif");
Il codice di esecuzione è qui.
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();
}
}
}