Jak przenieść plik z jednej lokalizacji do drugiej? Kiedy uruchamiam program, każdy plik utworzony w tej lokalizacji jest automatycznie przenoszony do określonej lokalizacji. Skąd mam wiedzieć, który plik został przeniesiony?
Jak przenieść plik z jednej lokalizacji do drugiej? Kiedy uruchamiam program, każdy plik utworzony w tej lokalizacji jest automatycznie przenoszony do określonej lokalizacji. Skąd mam wiedzieć, który plik został przeniesiony?
Odpowiedzi:
myFile.renameTo(new File("/the/new/place/newName.file"));
File # renameTo to robi (może nie tylko zmieniać nazwę, ale także przemieszczać się między katalogami, przynajmniej w tym samym systemie plików).
Zmienia nazwę pliku oznaczonego tą abstrakcyjną nazwą ścieżki.
Wiele aspektów zachowania tej metody jest z natury zależnych od platformy: operacja zmiany nazwy może nie być w stanie przenieść pliku z jednego systemu plików na inny, może nie być atomowy i może się nie powieść, jeśli plik z docelową abstrakcyjną nazwą ścieżki już istnieje. Zawsze należy sprawdzać zwracaną wartość, aby upewnić się, że operacja zmiany nazwy zakończyła się pomyślnie.
Jeśli potrzebujesz bardziej kompleksowego rozwiązania (na przykład chcesz przenieść plik między dyskami), spójrz na Apache Commons FileUtils # moveFile
myFile
ścieżka obiektu nie jest aktualizowana przez to polecenie. Więc będzie wskazywać na plik, którego już nie ma.
Dzięki Java 7 lub nowszej możesz używać Files.move(from, to, CopyOption... options)
.
Na przykład
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
Więcej informacji można znaleźć w dokumentacji plików
Aby przenieść plik, możesz również użyć Jakarta Commons IOs FileUtils.moveFile
W przypadku błędu zgłasza an IOException
, więc jeśli nie zostanie zgłoszony żaden wyjątek, wiesz, że plik został przeniesiony.
File.renameTo
z Java IO można użyć do przeniesienia pliku w Javie. Zobacz także to pytanie SO .
Po prostu dodaj ścieżki folderów źródłowych i docelowych.
Przeniesie wszystkie pliki i folder z folderu źródłowego do folderu docelowego.
File destinationFolder = new File("");
File sourceFolder = new File("");
if (!destinationFolder.exists())
{
destinationFolder.mkdirs();
}
// Check weather source exists and it is folder.
if (sourceFolder.exists() && sourceFolder.isDirectory())
{
// Get list of the files and iterate over them
File[] listOfFiles = sourceFolder.listFiles();
if (listOfFiles != null)
{
for (File child : listOfFiles )
{
// Move files to destination folder
child.renameTo(new File(destinationFolder + "\\" + child.getName()));
}
// Add if you want to delete the source folder
sourceFolder.delete();
}
}
else
{
System.out.println(sourceFolder + " Folder does not exists");
}
Java 6
public boolean moveFile(String sourcePath, String targetPath) {
File fileToMove = new File(sourcePath);
return fileToMove.renameTo(new File(targetPath));
}
Java 7 (przy użyciu NIO)
public boolean moveFile(String sourcePath, String targetPath) {
boolean fileMoved = true;
try {
Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
fileMoved = false;
e.printStackTrace();
}
return fileMoved;
}
Możesz wykonać zewnętrzne narzędzie do tego zadania (jak copy
w środowiskach Windows), ale aby zachować przenośność kodu, ogólne podejście jest następujące:
File#renameTo
będzie działać tak długo, jak długo źródło i lokalizacja docelowa będą na tym samym woluminie. Osobiście unikałbym używania go do przenoszenia plików do różnych folderów.
Spróbuj tego :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
Napisałem tę metodę, aby zrobić to samo w moim własnym projekcie tylko z plikiem zastępowania, jeśli istnieje w nim logika.
// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
File tDir = new File(targetPath);
if (tDir.exists()) {
String newFilePath = targetPath+File.separator+sourceFile.getName();
File movedFile = new File(newFilePath);
if (movedFile.exists())
movedFile.delete();
return sourceFile.renameTo(new File(newFilePath));
} else {
LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
return false;
}
}
Spróbuj tego.
private boolean filemovetoanotherfolder(String sourcefolder, String destinationfolder, String filename) {
boolean ismove = false;
InputStream inStream = null;
OutputStream outStream = null;
try {
File afile = new File(sourcefolder + filename);
File bfile = new File(destinationfolder + filename);
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024 * 4];
int length;
// copy the file content in bytes
while ((length = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
// delete the original file
afile.delete();
ismove = true;
System.out.println("File is copied successful!");
} catch (IOException e) {
e.printStackTrace();
}finally{
inStream.close();
outStream.close();
}
return ismove;
}
close
instrukcje znajdowały się w finally
bloku lub gdyby używał bloku try-with-resources.
Możesz spróbować tego… czystego rozwiązania
Files.move(source, target, REPLACE_EXISTING);
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING