我正在开发一个程序,它在后台扫描一些文件夹并在某些事件上移动一些文件。我的问题是,我不想完全阻止我目前正在处理的驱动器,所以我的问题是: 有没有办法限制文件移动速度? 如果没有,是否会使用输入/输出流来复制文件并在每次调用后放入Thread.sleep实现我的目标?
我目前正在使用mp3agic将文件保存到另一个位置并在之后删除原件,但我想查看一个自己的文件移动方法实现。
以下是当前代码:
public void save(String newFilename) throws IOException, NotSupportedException {
if (path.toAbsolutePath().compareTo(Paths.get(newFilename).toAbsolutePath()) == 0) {
throw new IllegalArgumentException("Save filename same as source filename");
}
try (SeekableByteChannel saveFile = Files.newByteChannel(Paths.get(newFilename), EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.WRITE))) {
if (hasId3v2Tag()) {
ByteBuffer byteBuffer = ByteBuffer.wrap(id3v2Tag.toBytes());
byteBuffer.rewind();
saveFile.write(byteBuffer);
}
saveMpegFrames(saveFile);
if (hasCustomTag()) {
ByteBuffer byteBuffer = ByteBuffer.wrap(customTag);
byteBuffer.rewind();
saveFile.write(byteBuffer);
}
if (hasId3v1Tag()) {
ByteBuffer byteBuffer = ByteBuffer.wrap(id3v1Tag.toBytes());
byteBuffer.rewind();
saveFile.write(byteBuffer);
}
saveFile.close();
}
}