한 위치에서 다른 위치로 파일을 어떻게 이동합니까? 프로그램을 실행하면 해당 위치에서 생성 된 모든 파일이 지정된 위치로 자동으로 이동합니다. 어떤 파일이 이동되었는지 어떻게 알 수 있습니까?
답변:
myFile.renameTo(new File("/the/new/place/newName.file"));
File # renameTo 는이를 수행합니다 (이름을 바꿀 수있을뿐만 아니라 적어도 동일한 파일 시스템에서 디렉토리 사이를 이동할 수도 있습니다).
이 추상 경로 이름으로 표시된 파일의 이름을 바꿉니다.
이 방법의 동작의 많은 측면은 본질적으로 플랫폼에 따라 다릅니다. 이름 바꾸기 작업은 한 파일 시스템에서 다른 파일 시스템으로 파일을 이동할 수없고 원 자성이 아닐 수 있으며 대상 추상 경로 이름을 가진 파일이있는 경우 성공하지 못할 수 있습니다. 이미 존재 함. 반환 값은 항상 이름 바꾸기 작업이 성공했는지 확인해야합니다.
보다 포괄적 인 솔루션이 필요한 경우 (예 : 디스크간에 파일을 이동하려는 경우) Apache Commons FileUtils # moveFile을 참조하십시오.
myFile
경로는이 명령으로 업데이트되지 않습니다. 따라서 더 이상 존재하지 않는 파일을 가리 킵니다.
Java 7 이상에서는 Files.move(from, to, CopyOption... options)
.
예
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
자세한 내용은 파일 문서를 참조하십시오.
파일을 이동하려면 Jakarta Commons IOs FileUtils.moveFile을 사용할 수도 있습니다.
오류가 발생하면을 throw IOException
하므로 예외가 발생하지 않으면 파일이 이동되었음을 알 수 있습니다.
File.renameTo
Java IO에서 Java에서 파일을 이동하는 데 사용할 수 있습니다. 또한 이 SO 질문을 참조하십시오 .
소스 및 대상 폴더 경로를 추가하기 만하면됩니다.
소스 폴더에서 대상 폴더로 모든 파일과 폴더를 이동합니다.
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");
}
자바 6
public boolean moveFile(String sourcePath, String targetPath) {
File fileToMove = new File(sourcePath);
return fileToMove.renameTo(new File(targetPath));
}
Java 7 (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;
}
copy
Windows 환경에서 와 같이 해당 작업에 대해 외부 도구를 실행할 수 있지만 코드를 이식 가능하게 유지하려면 일반적인 접근 방식은 다음과 같습니다.
File#renameTo
소스 및 대상 위치가 동일한 볼륨에있는 한 작동합니다. 개인적으로 파일을 다른 폴더로 옮기는 데 사용하는 것을 피하고 싶습니다.
이 시도 :-
boolean success = file.renameTo(new File(Destdir, file.getName()));
이 방법을 작성하여 내 프로젝트에서 기존 논리가있는 경우 대체 파일로만이 작업을 수행했습니다.
// 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;
}
}
이것을 시도하십시오.
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
명령어가 finally
블록에 있거나 try-with-resources 블록을 사용한 경우 더 강력합니다 .
시도해볼 수 있습니다 .. 깨끗한 솔루션
Files.move(source, target, REPLACE_EXISTING);
javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: REPLACE_EXISTING