如何将文件从一个位置移动到另一个位置?当我运行我的程序时,在该位置创建的任何文件都会自动移动到指定位置。我如何知道移动了哪个文件?
提前致谢!
答案 0 :(得分:106)
myFile.renameTo(new File("/the/new/place/newName.file"));
File#renameTo这样做(它不仅可以重命名,还可以在目录之间移动,至少在同一个文件系统上)。
重命名此抽象路径名表示的文件。
此方法行为的许多方面本质上都依赖于平台:重命名操作可能无法将文件从一个文件系统移动到另一个文件系统,它可能不是原子的,并且如果文件具有目标抽象路径名已存在。应始终检查返回值以确保重命名操作成功。
如果您需要更全面的解决方案(例如想要在磁盘之间移动文件),请查看Apache Commons FileUtils#moveFile
答案 1 :(得分:57)
使用Java 7或更高版本,您可以使用Files.move(from, to, CopyOption... options)
。
E.g。
Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);
有关详细信息,请参阅Files文档
答案 2 :(得分:5)
要移动文件,您还可以使用Jakarta Commons IOs FileUtils.moveFile
出错时会抛出IOException
,所以当没有抛出异常时你知道文件已被移动。
答案 3 :(得分:4)
File.renameTo
可用于在Java中移动文件。另请参阅this SO question。
答案 4 :(得分:4)
只需添加源文件夹和目标文件夹路径。
它会将所有文件和文件夹从源文件夹移动到 目标文件夹。
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");
}
答案 5 :(得分:3)
Java 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;
}
答案 6 :(得分:2)
您可以为该任务执行外部工具(如Windows环境中的copy
),但为了保持代码的可移植性,一般方法是:
File#renameTo
就会起作用。就个人而言,我会避免使用它将文件移动到不同的文件夹。
答案 7 :(得分:2)
试试这个: -
boolean success = file.renameTo(new File(Destdir, file.getName()));
答案 8 :(得分:1)
答案 9 :(得分:0)
写了这个方法,在我自己的项目中只使用替换文件(如果有现有逻辑)来做这件事。
// 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;
}
}
答案 10 :(得分:0)
请尝试这个。
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;
}
答案 11 :(得分:0)
您可以尝试这个。.干净的解决方案
Files.move(source, target, REPLACE_EXISTING);