简介
通过java实现文件移动(先将文件拷贝到指定路径然后删除原文件)
代码
package com.xiaoruanzi.listenandmove;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Objects;
public class ListenMove extends Thread {
private File dir;
private File target;
public ListenMove(File dir, File target) {
super();
this.dir = dir;
this.target = target;
}
public void listenMove(File dir, File target) throws IOException {
File[] list = dir.listFiles();
if (Objects.nonNull(list)) {
for (int i = 0; i < list.length; i++) {
File f = list[i];
long now = System.currentTimeMillis();
if (f.lastModified() > now - 3000) {
// 获取源文件的字节输入流
RandomAccessFile raf_read = new RandomAccessFile(f.getAbsoluteFile(), "r");
// 获取目标文件的输出流
RandomAccessFile raf_write = new RandomAccessFile(new File(target, f.getAbsoluteFile().getName()),
"rw");
byte[] b = new byte[1024];
int len = 0;
while ((len = raf_read.read(b)) != -1) {
raf_write.write(b, 0, len);
}
raf_write.close();
raf_read.close();
f.getAbsoluteFile().delete();
}
if (f.isDirectory()) {
listenMove(f, target);
}
}
}
}
@Override
public void run() {
while (true) {
try {
// 开始移动
listenMove(dir, target);
Thread.sleep(1000);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.xiaoruanzi.listenandmove;
import java.io.File;
public class TestMove {
public static void main(String[] args) {
File f1 = new File("C:\\Users\\11209\\Desktop\\新建文件夹");
File f2 = new File("C:\\Users\\11209\\Desktop\\新建文件夹 (2)");
new ListenMove(f1, f2).start();
}
}
总结
需要注意的是对于文件拷贝需要使用字节流,而不是字符流