我有以下两难境地。每天我在一个目录中有 X 个文件夹需要移动到另一个目录然后备份这些文件。我正在创建一个 Java 程序来自动化该过程,但我无法将文件夹(以及其中的文件,在本例中为 .tif 图像)移动到新目录。
我有以下代码对我不起作用,因为它会生成 FileNotFoundException 并告诉我我的路径“是一个目录”;这正是我想要移动的。
我怎样才能解决这个问题 ??
package ilm.copy;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author I de la Torre
*/
public class ILMCopy {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
/*
Archivo a;
//Path originalPath = FileSystems.getDefault().getPath("E:\\CV_REPOSIT");
Path originalPath = FileSystems.getDefault().getPath("/home/incentivate/Desktop/origen");
Path destinationPath = FileSystems.getDefault().getPath("/home/incentivate/Desktop/destino");
//System.out.println(originalPath.getFileName());
a = new Archivo();
a.moverArchivo(originalPath, destinationPath);
*/
final String dirOrigen = "/home/incentivate/Desktop/origen/prueba";
final String dirDestino = "/home/incentivate/Desktop/destino/prueba";
File f = new File(dirOrigen);
File f2 = new File(dirDestino);
try {
Archivo.copyFiles(f, f2);
} catch (IOException ex) {
Logger.getLogger(ILMCopy.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这是我的文件类:
package ilm.copy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Archivo {
final static Logger LOGGER = Logger.getAnonymousLogger();
/*
public void moverArchivo(Path origin, Path destiny) {
try {
Files.move(origin, destiny, StandardCopyOption.REPLACE_EXISTING);
} catch (FileNotFoundException ex) {
LOGGER.log(Level.SEVERE, ex.getMessage());
} catch (IOException ex) {
LOGGER.log(Level.SEVERE, ex.getMessage());
}
}
*/
public static void copyFiles(File source, File dest)
throws IOException {
FileChannel inputChannel = null;
FileChannel outputChannel = null;
try {
inputChannel = new FileInputStream(source).getChannel();
outputChannel = new FileOutputStream(dest).getChannel();
outputChannel.transferFrom(inputChannel, 0, inputChannel.size());
}catch(Exception ex){
ex.printStackTrace();
}
finally {
inputChannel.close();
outputChannel.close();
}
}
}
作为一个选项,您可以使用此类,它的作用基本上是确定它是目录还是文件并复制它,如果是目录,它确定它包含的文件并复制它们:
这是如何使用该类的示例: