De naam van een bestand wijzigen met Java

Kunnen we een bestand hernoemen, bijvoorbeeld test.txtnaar test1.txt?

Als test1.txtbestaat, zal het dan hernoemen?

Hoe hernoem ik het naar het reeds bestaande test1.txt-bestand zodat de nieuwe inhoud van test.txt eraan wordt toegevoegd voor later gebruik?


Antwoord 1, autoriteit 100%

Gekopieerd van 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
}

Toevoegen aan het nieuwe bestand:

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

Antwoord 2, autoriteit 71%

Kortom:

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

Meer details:

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

Het volgende is rechtstreeks gekopieerd van http://docs.oracle. com/javase/7/docs/api/index.html:

Stel dat we een bestand willen hernoemen naar “nieuwe naam”, waarbij we het bestand in dezelfde map willen houden:

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

Stel dat we een bestand naar een nieuwe map willen verplaatsen, waarbij we dezelfde bestandsnaam willen behouden en elk bestaand bestand met die naam in de map willen vervangen:

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

Antwoord 3, autoriteit 16%

U wilt de renameTomethode op een Bestandobject.

Maak eerst een File-object om de bestemming weer te geven. Controleer of dat bestand bestaat. Als het niet bestaat, maakt u een nieuw File-object voor het te verplaatsen bestand. roep de renameTo-methode aan op het te verplaatsen bestand en controleer de geretourneerde waarde van renameTo om te zien of de aanroep succesvol was.

Als u de inhoud van het ene bestand aan het andere wilt toevoegen, zijn er een aantal schrijvers beschikbaar. Op basis van de extensie klinkt het alsof het platte tekst is, dus ik zou kijken naar de FileWriter.


Antwoord 4, autoriteit 16%

Voor Java 1.6 en lager geloof ik dat de veiligste en schoonste API hiervoor Guava’s Files.move.

Voorbeeld:

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

De eerste regel zorgt ervoor dat de locatie van het nieuwe bestand dezelfde map is, d.w.z. de oudermapvan het oude bestand.

BEWERKEN:
Ik schreef dit voordat ik Java 7 begon te gebruiken, wat een zeer vergelijkbare aanpak introduceerde. Dus als je Java 7+ gebruikt, zou je het antwoord van kr37 moeten zien en erop stemmen.


Antwoord 5, autoriteit 9%

De naam van het bestand wijzigen door het naar een nieuwe naam te verplaatsen. (FileUtils is van 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();
  }

Antwoord 6, autoriteit 7%

Dit is een gemakkelijke manier om een bestand te hernoemen:

       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");
        }

Antwoord 7, autoriteit 3%

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"));

Een bestaand bestand vervangen met de naam “text1.txt”:

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

Antwoord 8, autoriteit 3%

Probeer dit

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

Opmerking:
We moeten altijd de renameTo return-waarde controleren om er zeker van te zijn dat het hernoemen van het bestand succesvol is, omdat het platformafhankelijk is (ander besturingssysteem, ander bestandssysteem) en het geen IO-uitzondering genereert als hernoemen mislukt.


Antwoord 9, autoriteit 3%

Ja, u kunt File.renameTo() gebruiken. Maar vergeet niet om het juiste pad te hebben bij het hernoemen naar een nieuw bestand.

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));
           }
        });
    }
}

}


Antwoord 10, autoriteit 2%

Als het alleen gaat om het hernoemen van het bestand, kun je File.renameTo().

Als je de inhoud van het tweede bestand aan het eerste wilt toevoegen, kijk dan op FileOutputStream met de append-constructoroptieof Hetzelfde geldt voor FileWriter. U moet de inhoud van het bestand lezen om ze toe te voegen en weg te schrijven met behulp van de uitvoerstroom/schrijver.


Antwoord 11

Voor zover ik weet, zal het hernoemen van een bestand de inhoud niet toevoegen aan die van een bestaand bestand met de doelnaam.

Over het hernoemen van een bestand in Java, zie de documentatievoor de renameTo()-methode in de klasse File.


Antwoord 12

Files.move(file.toPath(), fileNew.toPath()); 

werkt, maar alleen als je ALLE gebruikte bronnen sluit (of automatisch sluit) (InputStream, FileOutputStreamenz.) Ik denk dat dezelfde situatie geldt met file.renameToof FileUtils.moveFile.


Antwoord 13

Hier is mijn code om meerdere bestanden in een map succesvol te hernoemen:

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();
            }
        }
    }
}

en voer het uit voor een voorbeeld:

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

Antwoord 14

De actiecode is hier.

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();
        }
    }
}

Other episodes