Làm cách nào để bạn di chuyển tệp từ vị trí này sang vị trí khác? Khi tôi chạy chương trình của mình, bất kỳ tệp nào được tạo ở vị trí đó sẽ tự động di chuyển đến vị trí được chỉ định. Làm cách nào để biết tệp nào đã được di chuyển?
Làm cách nào để bạn di chuyển tệp từ vị trí này sang vị trí khác? Khi tôi chạy chương trình của mình, bất kỳ tệp nào được tạo ở vị trí đó sẽ tự động di chuyển đến vị trí được chỉ định. Làm cách nào để biết tệp nào đã được di chuyển?
Câu trả lời:
myFile.renameTo(new File("/the/new/place/newName.file"));
File # rename Để thực hiện điều đó (nó không chỉ có thể đổi tên mà còn có thể di chuyển giữa các thư mục, ít nhất là trên cùng một hệ thống tệp).
Đổi tên tệp được biểu thị bằng tên đường dẫn trừu tượng này.
Nhiều khía cạnh của hoạt động của phương pháp này vốn phụ thuộc vào nền tảng: Thao tác đổi tên có thể không thể di chuyển tệp từ hệ thống tệp này sang hệ thống tệp khác, nó có thể không phải là nguyên tử và có thể không thành công nếu tệp có tên đường dẫn trừu tượng đích đã tồn tại. Giá trị trả về phải luôn được kiểm tra để đảm bảo rằng thao tác đổi tên đã thành công.
Nếu bạn cần một giải pháp toàn diện hơn (chẳng hạn như muốn di chuyển tệp giữa các đĩa), hãy xem Apache Commons FileUtils # moveFile
myFile
đường dẫn của đối tượng không được cập nhật bằng lệnh này. Vì vậy, nó sẽ được trỏ đến một tệp không còn ở đó.
Với Java 7 hoặc mới hơn, bạn có thể sử dụng Files.move(from, to, CopyOption... options)
.
Ví dụ
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
Xem tài liệu Tệp để biết thêm chi tiết
Để di chuyển một tệp, bạn cũng có thể sử dụng Jakarta Commons IOs FileUtils.moveFile
Khi gặp lỗi, nó sẽ ném một ký tự IOException
, vì vậy khi không có ngoại lệ nào được đưa ra, bạn biết rằng tệp đã được di chuyển.
File.renameTo
từ Java IO có thể được sử dụng để di chuyển một tệp trong Java. Cũng xem câu hỏi SO này .
Chỉ cần thêm đường dẫn thư mục nguồn và đích.
Nó sẽ di chuyển tất cả các tệp và thư mục từ thư mục nguồn sang thư mục đích.
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 (Sử dụng 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;
}
Bạn có thể thực thi một công cụ bên ngoài cho tác vụ đó (như copy
trong môi trường windows) nhưng, để giữ cho mã có thể di động, cách tiếp cận chung là:
File#renameTo
sẽ hoạt động miễn là nguồn và vị trí đích có cùng một khối lượng. Cá nhân tôi muốn tránh sử dụng nó để di chuyển tệp sang các thư mục khác nhau.
Thử đi :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
Đã viết phương pháp này để thực hiện điều này trong dự án của riêng tôi chỉ với tệp thay thế nếu logic hiện có trong đó.
// 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;
}
}
Hãy thử cái này.
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
hướng dẫn nằm trong một finally
khối hoặc nếu nó sử dụng khối thử với tài nguyên.
Bạn có thể thử này .. giải pháp sạch
Files.move(source, target, REPLACE_EXISTING);
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING