Cum să redenumiți un fișier fără a crea un alt fișier (Java) (Programare, Java, Redenumiți)

user3133300 a intrebat.
a intrebat.

Caut o modalitate de a redenumi un fișier într-un șir de caractere. renameTo ia doar un alt fișier ca parametru, dar vreau să ia un șir de caractere. Deci, practic, cum implementez această metodă aici?

public static void renameFile(File toBeRenamed, String new_name) {

}

Aș dori să redenumesc fișierul „toBeRenamed” în „new_name”. Trebuie să creez un alt fișier numit nou_nume, sau există vreo soluție de rezolvare? Vă mulțumim!

EDIT: Mulțumesc pentru răspuns, Luiggi. Iată o poză cu noua eroare:

Comentarii

  • duplicat stackoverflow.com/questions/1914474/… –  > Por Kick Buttowski.
  • @KickButtowski nu este chiar un duplicat. Aș putea spune că este foarte legat. –  > Por Luiggi Mendoza.
  • A File este doar un înveliș în jurul unui Stringși o mulțime de metode pentru a face lucruri legate de fișiere. Astfel, atunci când creați un File tot ceea ce obțineți este un obiect String. Poți să ne explici de ce nu vrei să faci asta? De fapt, nu creează un fișier real pe disc. –  > Por Dawood ibn Kareem.
2 răspunsuri
Luiggi Mendoza

The File clasă nu reprezintă fișierul fizic de pe hard disk, este doar un fișier reprezentare abstractă. Crearea unei noi instanțe a clasei File clasă nu înseamnă că se creează un fișier fizic.

Știind acest lucru, puteți redenumi fișierul utilizând o nouă clasă File fără să vă faceți griji cu privire la crearea de noi fișiere fizice. Cod adaptat din Redenumirea unui fișier folosind Java:

public static void renameFile(File toBeRenamed, String new_name)
    throws IOException {
    //need to be in the same path
    File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
    if (fileWithNewName.exists()) {
        throw new IOException("file exists");
    }
    // Rename file (or directory)
    boolean success = toBeRenamed.renameTo(fileWithNewName);
    if (!success) {
        // File was not successfully renamed
    }
}

EDIT: Pe baza actualizării întrebării dvs. și a acestui comentariu:

Am făcut o fotografie a erorii. „Unhandled Exception Type IO Exception”

Pare a fi una dintre acestea:

  1. Nu știți cum să gestionați excepțiile verificate.

    Pentru a face acest lucru, ar trebui să înfășurați metoda care aruncă excepția Exception (sau subclasa) într-o try-catch declarație:

    String new_name = getFilename(file);
    try {
        renameFiles(files[i], new_name);
    } catch (IOException e) {
        //handle the exception
        //using a basic approach
        e.printStacktrace();
    }
    

    Mai multe informații: Tutorial Java. Lecție: Excepții.

  2. Nu doriți ca metoda dumneavoastră să arunce o excepție verificată. În acest caz, ar fi mai bine să aruncați în schimb o excepție necontrolată, astfel încât să nu fie nevoie să gestionați manual excepția. Acest lucru se poate face prin aruncarea unei noi instanțe de RuntimeException sau o subclasă a acestei clase:

    public static void renameFile(File toBeRenamed, String new_name) {
        File fileWithNewName = new File(new_name);
        if (fileWithNewName.exists()) {
            throw new RuntimeException("file exists.");
        }
        // Rename file (or directory)
        boolean success = toBeRenamed.renameTo(fileWithNewName);
        if (!success) {
            // File was not successfully renamed
        }
    }
    

    Pentru mai multe informații, consultați linkul postat în secțiunea de mai sus.

  3. Nu doriți să aruncați deloc o excepție. În acest caz, ar fi mai bine să se returneze cel puțin o valoare pentru a ști dacă fișierul a fost redenumit cu exactitate:

    public static boolean renameFile(File toBeRenamed, String new_name) {
        //need to be in the same path
        File fileWithNewName = new File(toBeRenamed.getParent(), new_name);
        if (fileWithNewName.exists()) {
            return false;
        }
        // Rename file (or directory)
        return toBeRenamed.renameTo(fileWithNewName);
    }
    

    Și să vă actualizați codul în consecință:

    String new_name = getFilename(file);
    boolean result = renameFiles(files[i], new_name);
    if (!result) {
        //the file couldn't be renamed
        //notify user about this
        System.out.println("File " + files[i].getName() + " couldn't be updated.");
    }
    

Pe care să o alegeți? Va depinde în întregime de gustul dumneavoastră. Dacă aș fi în locul tău, aș folosi a treia opțiune pentru o muncă rapidă și murdară sau în faza de învățare, dar pentru o aplicație din lumea reală aș folosi a doua opțiune, dar folosind propria mea excepție personalizată care se extinde de la RuntimeException.

Comentarii

  • Bună Luiggi, acesta a fost un răspuns excelent și a avut mult sens. Cu toate acestea, am ceva probleme în a face să funcționeze, vă voi ține la curent și voi marca răspunsul dvs. ca răspuns odată ce am terminat. –  > Por user3133300.
  • Am făcut o poză cu eroarea. „Unhandled Exception Type IO Exception” Deci da 🙂 –  > Por user3133300.
  • Vă rog să nu ezitați să deschideți captura mea de ecran într-un tab nou pentru a o mări. Încerc să trec prin toate fișierele dintr-un dosar și să le redenumesc pe fiecare. Nu este nimic în neregulă cu metoda mea „getFileName”, care returnează un șir de caractere pe care vreau să îl fac noul nume de fișier. Îmi pare rău că aceasta a fost o întrebare cam prostească, nu pot să cred că nu mi-am dat seama că nu voi face niciun fișier real. –  > Por user3133300.
  • haideți să continuăm această discuție pe chat –  > Por user3133300.
Airam

Poate că acest lucru ar putea fi util pentru dvs.

// 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
}

Aceasta este extrasă dintr-o întrebare similară Redenumirea unui fișier folosind Java

Comentarii

  • Am încercat asta, dar atunci ar trebui să creez două fișiere. Vreau doar să redenumesc un fișier cu un șir de caractere fără a fi nevoie să creez un nou fișier. –  > Por user3133300.
  • @user313333300 nu creați un fișier fizic real atunci când creați o nouă instanță de File clasă. Verificați răspunsul meu. –  > Por Luiggi Mendoza.