Ganti nama file menggunakan Java


174

Bisakah kita mengubah nama file misalnya test.txtuntuk test1.txt?

Jika test1.txtada, apakah akan diganti namanya?

Bagaimana cara saya ganti nama menjadi file test1.txt yang sudah ada sehingga konten baru test.txt ditambahkan ke dalamnya untuk digunakan nanti?


6
Paragraf terakhir Anda sama sekali tidak menjelaskan operasi ganti nama. Ini menjelaskan operasi penambahan.
Marquis of Lorne

Jawaban:


173

Disalin dari 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
}

Untuk menambahkan file baru:

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

24
Kode ini tidak akan berfungsi dalam semua kasus atau platform. Mengubah nama metode ini tidak dapat diandalkan: stackoverflow.com/questions/1000183/...
Stephane Grenier

Hanya Pathcara yang bekerja untuk saya, renameToselalu mengembalikan false. Periksa baik jawaban kr37 atau jawaban ini
andras

107

Pendeknya:

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

Lebih detail:

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

Berikut ini disalin langsung dari http://docs.oracle.com/javase/7/docs/api/index.html :

Misalkan kita ingin mengganti nama file menjadi "nama baru", menyimpan file di direktori yang sama:

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

Sebagai alternatif, misalkan kita ingin memindahkan file ke direktori baru, menyimpan nama file yang sama, dan mengganti file yang ada dari nama itu di direktori:

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

1
Path adalah antarmuka yang implementasinya hanya WindowsPath, ZipPath, dan AbstractPath. Apakah ini akan menjadi masalah untuk implementasi multi-platform?
Caelum

1
Hai @ user2104648, di sini ( tutorials.jenkov.com/java-nio/path.html ) adalah contoh tentang bagaimana Anda bisa menangani file di lingkungan Linux. Pada dasarnya, Anda perlu menggunakan java.nio.file.Paths.get (somePath) alih-alih menggunakan salah satu implementasi yang Anda sebutkan
maxivis

2
Apakah sumber Path = ...?
Koray Tugay

@rr37 jawaban sempurna!
gaurav

30

Anda ingin memanfaatkan metode renameTo pada objek File .

Pertama, buat objek File untuk mewakili tujuan. Periksa untuk melihat apakah file itu ada. Jika tidak ada, buat objek File baru untuk file yang akan dipindahkan. panggil metode renameTo pada file yang akan dipindahkan, dan periksa nilai yang dikembalikan dari renameTo untuk melihat apakah panggilan berhasil.

Jika Anda ingin menambahkan konten dari satu file ke file lain, ada sejumlah penulis yang tersedia. Berdasarkan ekstensi, sepertinya itu teks biasa, jadi saya akan melihat FileWriter .


9
Tidak tahu, tapi itu hal yang sama persis bahwa Pierre diposting, tanpa kode sumber ...
Thomas Owens

28

Untuk Java 1.6 dan lebih rendah, saya percaya API teraman dan terbersih untuk ini adalah Filesvaove Guava .

Contoh:

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

Baris pertama memastikan bahwa lokasi file baru adalah direktori yang sama, yaitu direktori induk dari file lama.

EDIT: Saya menulis ini sebelum saya mulai menggunakan Java 7, yang memperkenalkan pendekatan yang sangat mirip. Jadi jika Anda menggunakan Java 7+, Anda akan melihat dan meningkatkan jawaban kr37.


18

Mengganti nama file dengan memindahkannya ke nama baru. (FileUtils berasal dari 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();
  }

13

Ini adalah cara mudah untuk mengganti nama file:

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

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

Untuk mengganti file yang ada dengan nama "text1.txt":

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

5

Coba ini

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

Catatan: Kita harus selalu memeriksa nilai pengembalian namaUntuk memastikan file rename berhasil karena tergantung platform (sistem operasi berbeda, sistem file berbeda) dan tidak membuang pengecualian IO jika penggantian nama gagal.


Bagaimana ini berbeda dari jawaban yang diterima yang diberikan oleh Pierre 9 tahun sebelumnya?
Hijauan

4

Ya, Anda dapat menggunakan File.renameTo (). Tapi ingat untuk memiliki jalur yang benar saat mengganti nama ke file baru.

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

    }
}

}



2

Sejauh yang saya tahu, mengubah nama file tidak akan menambahkan kontennya ke file yang ada dengan nama target.

Tentang mengganti nama file di Java, lihat dokumentasi untuk renameTo()metode di kelas File.


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

berfungsi, tetapi hanya ketika Anda menutup (atau autoclose) SEMUA sumber daya yang digunakan ( InputStream, FileOutputStreamdll.) Saya pikir situasi yang sama dengan file.renameToatau FileUtils.moveFile.


1

Ini kode saya untuk mengganti nama beberapa file dalam folder dengan sukses:

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

}

dan jalankan sebagai contoh:

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

-2

Kode yang sedang berjalan ada di sini.

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

2
Biasanya lebih baik untuk menjelaskan solusi daripada hanya memposting beberapa baris kode anonim. Anda dapat membaca Bagaimana cara menulis jawaban yang baik , dan juga Menjelaskan jawaban sepenuhnya berdasarkan kode
Anh Pham

Salin dan ganti nama biasanya operasi yang berbeda, jadi saya pikir harus ditandai dengan jelas bahwa ini adalah salinan. Yang juga terjadi lambat tidak perlu karena menyalin karakter dan bukan byte.
Joel Klinghed
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.