Ten kod nie będzie działał we wszystkich przypadkach lub na wszystkich platformach. Zmiana nazwy na metodę nie jest wiarygodna: stackoverflow.com/questions/1000183/…
Alternatywnie, załóżmy, że chcemy przenieść plik do nowego katalogu, zachowując tę samą nazwę pliku i zastępując istniejący plik o tej nazwie w katalogu:
Path to interfejs, którego jedynymi implementacjami są WindowsPath, ZipPath i AbstractPath. Czy będzie to problem w przypadku wdrożeń wieloplatformowych?
Cześć @ user2104648, tutaj ( tutorials.jenkov.com/java-nio/path.html ) jest przykładem tego, jak możesz obsłużyć pliki w środowisku Linux. Zasadniczo musisz użyć java.nio.file.Paths.get (somePath) zamiast jednej z wymienionych implementacji
Najpierw utwórz obiekt File, który będzie reprezentował miejsce docelowe. Sprawdź, czy ten plik istnieje. Jeśli nie istnieje, utwórz nowy obiekt File dla pliku do przeniesienia. wywołaj metodę renameTo na przenoszonym pliku i sprawdź zwróconą wartość z renameTo, aby sprawdzić, czy wywołanie zakończyło się pomyślnie.
Jeśli chcesz dołączyć zawartość jednego pliku do drugiego, dostępnych jest kilka programów do zapisu. Na podstawie rozszerzenia brzmi to jak zwykły tekst, więc spojrzałbym na FileWriter .
Pierwsza linia zapewnia, że lokalizacja nowego pliku jest tym samym katalogiem, tj. Katalogiem nadrzędnym starego pliku.
EDYCJA:
Napisałem to zanim zacząłem używać Javy 7, która wprowadziła bardzo podobne podejście. Więc jeśli używasz Java 7+, powinieneś zobaczyć i zagłosować odpowiedź kr37.
Uwaga:
Zawsze powinniśmy sprawdzać zwracaną wartość renameTo, aby upewnić się, że zmiana nazwy pliku zakończyła się pomyślnie, ponieważ jest zależna od platformy (inny system operacyjny, inny system plików) i nie zgłasza wyjątku we / wy, jeśli zmiana nazwy nie powiedzie się.
Jeśli chodzi tylko o zmianę nazwy pliku, możesz użyć File.renameTo () .
W przypadku, gdy chcesz dołączyć zawartość drugiego pliku do pierwszego, spójrz na FileOutputStream z opcją konstruktora append lub To samo dla FileWriter . Będziesz musiał przeczytać zawartość pliku, aby dołączyć i zapisać je za pomocą strumienia wyjściowego / programu zapisującego.
prace, ale tylko wtedy, gdy jesteś blisko (lub AutoClose) Wszystkie wykorzystane zasoby ( InputStream, FileOutputStreametc.) Myślę, że tę samą sytuację z file.renameTolub FileUtils.moveFile.
Oto mój kod, aby pomyślnie zmienić nazwę wielu plików w folderze:
publicstaticvoid 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 =newFile(folderPath);int i =1;if(dir.isDirectory()){// make sure it's a directoryfor(finalFile f : dir.listFiles()){try{File newfile =newFile(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();}}}}
Kopiowanie i zmiana nazwy są zwykle różnymi operacjami, więc myślę, że należy wyraźnie zaznaczyć, że jest to kopia. Co również jest niepotrzebnie powolne, ponieważ kopiuje znaki, a nie bajty.
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.